Klaus Mock: Variable im Packagenamen?!

Beitrag lesen

Hallo,

my $result = eval("$package::evaluate($p1,$p2,$p3)");

Versuchs mal mit

  
my $result = eval("${package}::evaluate($p1,$p2,$p3)");  

Grund:
Beim auswerten des Strings "$package::evaluate" versucht Perl den Inhalt der Variablen 'evaluate' des Packages $package zu ermitteln, der aber zwangsläufig undef ist, also wird nur mehr "($p1,$p2,$p3)" evaluiert, was an sich ja auch ein gültiger Ausdruck ist, also keinen Fehler verursacht. Durch die Angabe von "${package}" wird nur die Variable $package verwendet, und der Rest ("::evaluate") als reiner Text verwendet.

Hier mein kleines Testbeispiel:

  
#!/usr/bin/perl  
  
use strict;  
  
my $PackageName = "myPackage1";  
  
eval ("${PackageName}::test();");  
  
package myPackage1;  
sub test  
{  
 print "das ist package 1\n";  
}  
  
package myPackage2;  
  
sub test  
{  
 print "das ist package 2\n";  
}  
  

Grüße
  Klaus