Aufruf von Prozeduren und Funktionen mit Strings
Philipp Hasenfratz
- perl
Halihallo
Ich möchte gerne Funktionen und Prozeduren durch ihren Namen (als String) aufrufen.
z. B.
my $proc = "SOAP_Function1";
my %Ret = &{$proc}->(%params); # Funktioniert nicht, wie ich das will ;-(
natürlich gibt es auch die Möglichkeit
%procs = (
SOAP_Function1 => /&SOAP_Function1,
SOAP_Function2 => /&SOAP_Function2); # mit / ist der Backslash gemeint.
my $procPtr = $procs{$proc};
my %Ret = &$procPtr->{%params};
oder ein Aufruf mit eval(),
... aber geht das nicht auch anders? - Wäre froh um eine andere Möglichkeit.
Also: Wie kann ich eine Funktion mit deren Namen, gespeichert in einem String aufrufen?
Vielen Dank im Voraus
Philipp
Hallo,
my $proc = "SOAP_Function1";
my %Ret = &{$proc}->(%params); # Funktioniert nicht, wie ich das will ;-(
Also: Wie kann ich eine Funktion mit deren Namen, gespeichert in einem String aufrufen?
my %Ret = &{$proc}(%params);
würde z.B. funktionieren, da $proc ja nur den Namen der Funktion, aber nicht die Referenz darauf speichert.
Frag mich jetzt nicht, wo das nachzulesen ist, ich weiß es nicht auswendig (perldoc perlref wahrscheinlich)
Grüße
Klaus
my $proc = "SOAP_Function1";
my %Ret = &{$proc}->(%params); # Funktioniert nicht, wie ich das will ;-(
Also: Wie kann ich eine Funktion mit deren Namen, gespeichert in einem String aufrufen?
my %Ret = &{$proc}(%params);
würde z.B. funktionieren, da $proc ja nur den Namen der Funktion, aber nicht die Referenz darauf speichert.
Ja, das war auch meine Frage. Dachte eben, dass bei &{$var} $var der Pointer auf eine Prozedur sein muss.
Leider musste ich noch ein no strict 'refs' einfügen, da es sonst nicht funktioniert, da er strings nicht als Function-Allocator akzeptiert. Wüsste nicht, wie man das umgeht, aber egal. Es funktioniert ja.
Viele Grüsse und Dankeschön
Philipp