Array, Hash, Referenzen

Mit meinen Kenntnissen in Perl beiße ich mir die Zähne an folgendem Problem aus:
Ich habe mehrere Hashes folgender Art:
%Berlin = ( Name => „Meier“, Vorname => „Willi“);
%Kiel = ( Name => „Meier“, Vorname => „Werner“);
%Mainz = ( Name => „Schmidt“, Vorname => „Hans“);
Nun übergebe ich im Aufruf des Scripts den Namen des gewünschtes Hash`s; z.B. www.xyz.de/test.pl?Kiel
Im Script möchte ich nun Einzelwerte aus dem Hash abfragen, also z.B.:
print „$Kiel{‚Vorname‘}\n“;
nur eben soll der Hash nicht statisch als „$Kiel“ angesprochen werden, sondern abhängig vom übergebenen QUERY_STRING! Also:
nicht „$Kiel“ sondern $($ENV{‚QUERY_STRING‘}) und daraus einen Wert gem. Key, z.B. $($ENV{‚QUERY_STRING‘}){‚Vorname‘}
Der Wert wäre in diesem Fall also: „Werner“
Problem: Das Konstrukt $($ENV{‚QUERY_STRING‘}){‚Vorname‘} führt bei mir zu folgender Ausgabe: „0Kiel){‚Vorname‘}“
Wer kann mir helfen? Wie müßte die korrekte Syntax lauten???

Hi Udo,

Problem: Das Konstrukt $($ENV{‚QUERY_STRING‘}){‚Vorname‘}
führt bei mir zu folgender Ausgabe: „0Kiel){‚Vorname‘}“
Wer kann mir helfen? Wie müßte die korrekte Syntax lauten???

Statt runde Klammern am Anfang müssen geschweifte verwendet
werden der Form ${AUSDRUCK}, also bei Dir:

${$ENV{'QUERY\_STRING'}}{'Vorname'}

Gruss,
-Andreas.

Vergiss diesen ganzen $ENV-Mist. Für CGI gibts das CGI-Modul.
Um dein Problem zu lösen, braucht man die Eval-anweisung:

use CGI;
%Berlin = ( Name =\> "Meier", Vorname =\> "Willi");
%Kiel = ( Name =\> "Meier", Vorname =\> "Werner");
%Mainz = ( Name =\> "Schmidt", Vorname =\> "Hans");

$Anfrage = new CGI; #neues CGI-Objekt
$stadt=$Anfrage-\>param("stadt"); #Parameter auslesen, der wert in klammern entspricht dem namen des formularfeldes

$evalstr= 'print $' . $stadt . '{"Vorname"};';
eval ($evalstr);

deutlich eleganter geht es aber mit einem hash of hashes:

my %staedte = ( 
 "Berlin" =\> { Name =\> "Meier", Vorname =\> "Willi"}, 
 "Kiel" =\> { Name =\> "Meier", Vorname =\> "Werner"}, 
 "Mainz" =\> { Name =\> "Schmidt", Vorname =\> "Hans"}
 );
use CGI;
$Anfrage = new CGI; #neues CGI-Objekt
$stadt=$Anfrage-\>param("stadt"); #Parameter auslesen, der wert in klammern entspricht dem namen des formularfeldes
print $staedte($stadt)-\>{"Vorname"};

cu ,
holli