Thread Bad name after... (52 answers)
Opened by bianca at 2015-02-19 12:08

rosti
 2015-02-19 14:26
#179733 #179733
User since
2011-03-19
3194 Artikel
BenutzerIn
[Homepage]
user image
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)

View full thread Bad name after...