Matti Maekitalo: Funktion ausfuehren, deren Namen nur als Skalar bekannt

Beitrag lesen

use Mosche;

ich moechte in Abhaengigkeit des Wertes eines Skalars eine Funktion ausfuehren lassen.

eval $scalar; funktioniert bei mir..

Wenn du die entsprechende Funktion nur so (also "indirekt") aufrufst, empfehle ich dir aber was anderes:

my %subs;
$subs{'meine_sub'} = sub {
    print "test";
}; # Semikolon nicht vergessen

Aufruf:

my $str = 'meine_sub';
$subs{$str}(); # oder auch: $subs{$str}->(); # Parameter wie gewohnt in () übergeben

Dass müsste prinzipiell auch schneller sein. Auf jeden Fall halte ich diese Lösung für "sauberer", weil man leichter die Existenz der ensprechenden Funktion überprüfen kann (defined $subs{'meine_sub'} ? ...). Weiterhin kann man dir nicht so leicht fremden Code rüberschieben:

my $str = "rm -rf /"; eval $str; # Vorsicht: Code nicht ausprobieren :-)

use Tschoe qw(Matti);

--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.