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