Jörk Behrends: Variable dereferenzieren

Beitrag lesen

Hi!

Es ging ja allgemein darum, den Inhalt eines Strings als Variablenbezeichner zu verwenden,  weshalb ich mir eval() noch mal durch den Kopf gehen lassen habe ;-).
Hier noch mal eine "Lösung" der Vollständigkeit halber und fürs Archiv (auch wenn <../../sfarchiv/1999_3/t05324.htm> ein wenig ähnelt, und doch anders ist ;-) Als Beispiel hab ich folgendes Skript zusammengestellt:

my $secret = "Hallo Welt";
my $referenz = $secret;
my (%input, $variable, $variable2);

als Alternative zum Evaluieren anhängen (funktioniert auch):

$input{'var_name'} = 'secret';

$input{'referenz'} = 'referenz';

eval ('$variable = $'.'secret');
eval ('$variable2 = $$'.'referenz');

print $variable."\n";
print $variable2."\n";

»»

Anstelle der Strings hinter dem Punkt im eval(String) kann natürlich auch das(der?) Hash{Key} stehen.
Das obige Skript funktioniert, wenn es auch mit Vorsicht zu genießen ist. Es könnte ja jemand Deinen Query_String mit allerlei Unsinn füttern <g>

Ich denke eher, daß der Weg über die CGI-Parameter gehen sollte. Also unter Verwendung des input-Hashes:

$wert = eval( '$' . $input{'var_name'} );

Bei solchen eval-Lösungen ist aber generell Vorsicht geboten. Man weiß ja nie, was für Parameter ein paar hinterlistige Anwender sich aus den Finger ziehen:

$input{'var_name'} = "a; rmdir(../cgi-bin);";

Gruß,
   Jörk