Jörk Behrends: Variable dereferenzieren

Beitrag lesen

Alex,

$a = 3;
%c = ('b' => 'a');
print ${$c{'b'}};     # hier wird der Wert von $a, also 3 ausgegeben.

Stellt sich eigentlich nur noch die Frage, warum Cruz hiermit Probleme hatte
»»»»»»> auch nicht so:  ${$input{'var_name'}}

Ich fand die Idee von Dir gut und hab sie gleich ausprobiert, bin aber auf folgendes Problem gestoßen:

$secret = "Hallo Welt";
$input{'var_name'} = 'secret';

$a = $input{'var_name'};

%c = ('b' => 'a');
print ${$c{'b'}};

Ob über $a oder direkt an $c{'b'} überwiesen (ob das auch mit der DB geht ? {Deutsche Bank natürlich, und nicht Deutsche Bundesbahn ;-)}) , heist das Ergebnis nun "secret" !

Ist doch eigentlich auch klar, oder?
$a = $input{'var_name'}; Setzt $a auf 'secret'. Da über $c{'b'} ein 'a' zurückgegeben wird, erhalt man nun auch über die dereferenzierung ${...} den Wert von $a also 'secret'.

Dein Beispiel müßte also durch eine weitere Dereferenzierung zum Laufen zu bringen sein:
print ${${$c{'b'}}};

Ich frage mich nur, warum Du hier einen solchen Weg gehst. In Deinem Beispiel hast Du doch schon ein Hash namens input. Verwende dieses enstelle von c und benutze 'var_name' als Index:
${$input{'var_name'}}

Oder anders gesagt - so wie ursprünglich mal von Cruz angedacht ...

Ich bleibe also dabei: Eigentlich müßte es so funktionieren, wie Cruz es probiert hat, aber ...

Grüß,
   Jörk