abfangen "&$perl_function_name(10)" wenn funktion nicht existier
roger
- perl
Hallo,
über eine Variable in der der Funktionsname steht, springe ich Funktionen an.
Wie kann ich das sauber abfangen wenn der Funktionsname nicht stimmt/existiert. (schreibfehler)
Gruß
roger
Wie kann ich das sauber abfangen wenn der Funktionsname nicht stimmt/existiert. (schreibfehler)
Das könnte dir helfen: http://stackoverflow.com/questions/433752/how-can-i-determine-if-a-perl-function-exists-at-runtime
Abend,
Das könnte dir helfen: http://stackoverflow.com/questions/433752/how-can-i-determine-if-a-perl-function-exists-at-runtime
das ist schon gut so. Da die Funktionen Parameter haben ist das mit dem Hash nicht so gut.
Wie kann ich es nun anstellen, das eine Funktion mit Parameter aufgerufen wird ??
z.B.
my $befehl = 'lesen';
&$befehl($para1,$para2,$para3)
So funktioniert es nicht.
Wie kann ich dies lösen ??
Danke
roger
Wie kann ich es nun anstellen, das eine Funktion mit Parameter aufgerufen wird ??
z.B.
my $befehl = 'lesen';
&$befehl($para1,$para2,$para3)
>
> So funktioniert es nicht.
>
> Wie kann ich dies lösen ??
Mit einem Hash, auch wenn du das nicht sehen willst. Übergebe immer die Parameter. Deine Funktionen müssen diese Parameter ja nur auf Bedarf verwenden.
mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
Wie kann ich es nun anstellen, das eine Funktion mit Parameter aufgerufen wird ??
z.B.
my $befehl = 'lesen';
&$befehl($para1,$para2,$para3)
>
> So funktioniert es nicht.
>
> Wie kann ich dies lösen ??
So:
~~~perl
my $befehl = 'lesen';
$befehl->($para1,$para2,$para3) if ref $befehl eq 'CODE';
Struppi.
So:
my $befehl = 'lesen';
$befehl->($para1,$para2,$para3) if ref $befehl eq 'CODE';
Quark.
so:
~~~perl
no strict 'refs';
$befehl->(1,2,3) if defined &{$befehl};
Struppi.
Wie kann ich es nun anstellen, das eine Funktion mit Parameter aufgerufen wird ??
z.B.
my $befehl = 'lesen';
&$befehl($para1,$para2,$para3)
> >
> > So funktioniert es nicht.
> >
> > Wie kann ich dies lösen ??
>
> So:
>
> ~~~perl
my $befehl = 'lesen';
> $befehl->($para1,$para2,$para3) if ref $befehl eq 'CODE';
>
Das würde ich NICHT tun, weil es böse ist beliebige Subs von aussen zugänglich zu machen.
mfg Beat
Das würde ich NICHT tun, weil es böse ist beliebige Subs von aussen zugänglich zu machen.
Mal abgesehen davon, dass der Code so sowieso falsch war, wieso von aussen und wieso beliebig und wieso zugänglich?
Das Beispiel kann z.b. von einem Perl/TK Skript kommen, wo Buttons eine Funktion auslösen, beliebig ist es auch nicht, sie müssen im package sein und zugänglich ist nur der Aufruf, aber keine Parameter oder sonst was.
Struppi.
Tach auch.
über eine Variable in der der Funktionsname steht, springe ich Funktionen an.
Wie kann ich das sauber abfangen wenn der Funktionsname nicht stimmt/existiert. (schreibfehler)
Wenn es dir darum geht, Funktionen aufzurufen, welche durch Usereingaben bestimmt werden, würde ich dir empfehlen, anonyme Funktionen in einem Hash zu speichern. Dann kannst du auf Existens des Hash-Keys prüfen, und der User kann nicht irgendwelche Funktionen aufrufen, sondern nur solche, die du explizit als so aufrufbar definierst.
Bis die Tage,
Matti
über eine Variable in der der Funktionsname steht, springe ich Funktionen an.
Diese Vorgehen ist bereits kriminell. Die Antwort lautet: tue es nicht!
Wie kann ich das sauber abfangen wenn der Funktionsname nicht stimmt/existiert. (schreibfehler)
my %funcs = (
key1 => &func1,
key2 => &func2,
);
if( exists $funcs{$userinput} ){ $funcs{$userinput}->(); }
else{ ... # your Errorhandling }
mfg Beat