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