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