Thread Bad name after...
(52 answers)
Opened by bianca at 2015-02-19 12:08
Dein Konzept ist überarbeitungsbedürftig. Codereferenzen, ja, aber ich würde sie anders einbinden:
Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 # externe Datei lib.pl my $foo = sub{}; my $bar = sub{}; # anstelle der üblichen 1; notieren wir hier eine Hashreferenz { foo => $foo, bar => $bar }; Und dann in der main: Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 my $main = bless{}; # als Beispiel einer Instanz # foo soll im Scope der main afgerufen werden $main->execute('foo'); sub execute{ my $self = shift; my $name = shift; # entweder haben wir die sub im eigenen Scope # oder wir binden sie als CodeRef ein if( my $code = $self->can($name) ){ $self->$code(@_) } else{ my $codehash = do 'lib.pl'; if( my $coderef = $codehash->{$name} ){ $self->$coderef(@_); } } } Es wäre noch die Fehlerbehandlung anzupassen und dafür zu sorgen, dass do 'lib.pl' nur einmal gemacht wird. Nutze dafür ein mit state deklariertes Semaphore (Einen Hash zum Merken, ob do 'lib.pl' bereits erfolgte ). Last edited: 2015-02-19 14:47:07 +0100 (CET) |