Probleme bei exists-Abfrage in einem Hash
Silvio
- perl
Hallo,
Ich möchte mit folgendem Code prüfen, ob in einem Hash ein Key vorhanden/ gesetzt ist.
use Data::Dumper;
my %itemSet;
print "Dump vor exists-Abfrage: " . Dumper(%itemSet) . "\n\n";
if (exists $itemSet{'item'}{'imageSet'}{1}{'large'} ) {print "'large' ist vorhanden\n\n";}
print "Dump nach exists-Abfrage: " . Dumper(%itemSet) . "\n\n";
Im Ergebnis erhalte ich
Dump vor exists-Abfrage:
Dump nach exists-Abfrage: $VAR1 = 'item'; $VAR2 = { 'imageSet' => { '1' => {} } };
Was ich nicht verstehe ist, warum %itemSet nach der exists-Abfrage auf einmal gefüllt ist?
Und kann ich das verhindern?
Danke!
Hallo Silvio,
use Data::Dumper; my %itemSet; print "Dump vor exists-Abfrage: " . Dumper(%itemSet) . "\n\n"; if (exists $itemSet{'item'}{'imageSet'}{1}{'large'} ) {print "'large' ist vorhanden\n\n";} print "Dump nach exists-Abfrage: " . Dumper(%itemSet) . "\n\n";
Dump vor exists-Abfrage:
Dump nach exists-Abfrage: $VAR1 = 'item'; $VAR2 = { 'imageSet' => { '1' => {} } };
Was ich nicht verstehe ist, warum %itemSet nach der exists-Abfrage auf einmal gefüllt ist?
Um zu prüfen, ob der letzte Schlüssel large
existiert, werden die davor liegenden Hash of Hashes angelegt.
Und kann ich das verhindern?
Mehrstufig prüfen, d.h. auf den Zwischenebenen schauen, ob diese existieren.
Viele Grüße
Robert
Ok, vielen Dank.
Ich hätte ja erwartet, dass die Prüfung schon abbricht, wenn der erste Schlüssel nicht vorhanden ist. Denn dann können die folgenden ja sowieso nicht da sein?!
Hallo Silvio,
laut der Perl-Doku zu exists wird nur geprüft, ob der letzte Teil existiert. Um das herauszufinden muss Perl allerdings in deinem Fall den Rest vorher anlegen.
Viele Grüße
Robert