Thread Ist Module::Load unsicher (37 answers)
Opened by Max_Perlbeginner at 2017-09-06 14:28

rosti
 2017-09-07 08:23
#187360 #187360
User since
2011-03-19
3194 Artikel
BenutzerIn
[Homepage]
user image
eval "use $module;1" macht ja auch nichts weiter als den String als Code zu interpretieren und wenn das Compilieren erfolgreich war, die letzte Anweisung zurückzugeben. So wird die 1 nach dem Semikolon als letzte Anweisung betrachtet und zurückgegeben.

Code (perl): (dl )
1
2
my $module = "CGI";
print eval "use $module; 99";


gibt also 99 zurück. Bezüglich generellen Kompilierverhalten ist zu sagen, dass sämtliche in plain notierte use Anweisungen als Erstes ausgeführt werden bevor überhaupt irgendwelche Variablen initialisiert werden. Ein "use $module" jedoch nicht weil das für den Compiler einen String bzw. Literal darstellt.

eval "use xy" ermöglich also lediglich ein nach dem BEGIN{} Block späteres Nachladen vom Code der mit use eingebunden werden soll. Was mit require aber auch ohne eval möglich ist.

Ein eval "require $module; 1" ist unsinnig.

MfG

View full thread Ist Module::Load unsicher