Hi, Ich habe folgendes Problem: In meinem Script greife ich auf Methoden einer anderen Klasse zu. Der Subroutine-Name soll aber von einer Variablen kontrolliert werden, und zwar in der Art: Package::$name(); (alle Werte die $name annehmen kann sind auch in der Klasse drin). Ich weiss es waere einfacher eine Abfrage zu machen wie z.B. Package::methode1 if $name eq "methode1"; aber es wuerde mich trotzdem interessieren ob das irgendwie geht. Und zwar ohne in der Klasse die subs in eine Variable zu stecken: $var = sub {...}; Gruss, Oliver
On Die, 31 Jul 2001, Oliver Kiehl wrote:
In meinem Script greife ich auf Methoden einer anderen Klasse zu. Der Subroutine-Name soll aber von einer Variablen kontrolliert werden, und zwar in der Art:
Package::$name();
(alle Werte die $name annehmen kann sind auch in der Klasse drin).
Muesste via nem ref gehen... Siehe man perlref: #!/usr/bin/perl -w use strict; sub foo { print "foo\n"; }; my $barref = sub { print "bar\n"; }; my $subref = \&foo; &$subref; $subref = $barref; &$subref; HTH, -dnh -- "A priest is either a PFW on the ultimate support line, or a fraud adept at offering bogus answers to difficult problems while holding lusers at bay with arcane ritual." -- Malcolm Ray
On Wed, Aug 01, 2001 at 01:15:41AM +0200, David Haller wrote:
On Die, 31 Jul 2001, Oliver Kiehl wrote:
In meinem Script greife ich auf Methoden einer anderen Klasse zu. Der Subroutine-Name soll aber von einer Variablen kontrolliert werden, und zwar in der Art:
Package::$name();
(alle Werte die $name annehmen kann sind auch in der Klasse drin).
Muesste via nem ref gehen... Siehe man perlref:
#!/usr/bin/perl -w use strict;
sub foo { print "foo\n"; }; my $barref = sub { print "bar\n"; };
my $subref = \&foo; &$subref; $subref = $barref; &$subref;
Ja, dass muesste Funktionieren, aber das hat sich bereits geklaert. Andre Heine hat mir eine sehr elegante Methode mittels Hash empfohlen: %hash = ( 'test' => \&Packet::test, 'test2' => \&Packet::test2 ); $var = test; while (irgendwas) { $hash{$var}->(); } aber trotzdem Danke. Gruss, Oliver;
On Mit, 01 Aug 2001, Oliver Kiehl wrote:
my $subref = \&foo; &$subref; $subref = $barref; &$subref;
Ja, dass muesste Funktionieren, aber das hat sich bereits geklaert. Andre Heine hat mir eine sehr elegante Methode mittels Hash empfohlen:
%hash = ( 'test' => \&Packet::test, 'test2' => \&Packet::test2, ^^^^^^^^^^^^^^^ Das sind auch nur Refs auf subs, wie du die Verwaltest ist eigentlich egal. Insofern ist das Verwalten der refs in einem hash nur eine Erweiterung meines Vorschlages. Denn es muesste ebenfalls gehen:
'test3' => \&foo, 'test4' => $barref ) Have fun ;) -dnh, z.Z. auch heftig perl lernend -- "Two of my imaginary friends reproduced once ... with negative results." float@interport.net (void)
participants (2)
-
David Haller
-
Oliver Kiehl