Liste in Hash (und vor allem: wieder rausholen)
MudGuard
- perl
Hallo,
kleines Problem mit Listen in Hashes...
Hier mein Script-Versuch:
#!perl -w
use strict;
use warnings;
my %testhash;
my @irllist = (13, 17, 19);
my @wallist = (42, 44, 46, 48);
$testhash{"irl"} = @irllist;
$testhash{"wal"} = @wallist;
foreach ($testhash{"irl"})
{
print "IrlWert ist $_\n";
}
foreach ($testhash{"wal"})
{
print "WalWert ist $_\n";
}
print $testhash{"irl"}[1];
Anstelle der erhofften Ausgabe
IrlWert ist 13
IrlWert ist 17
IrlWert ist 19
WalWert ist 42
WalWert ist 44
WalWert ist 46
WalWert ist 48
17
bekomme ich
IrlWert ist ARRAY(0x1b932a4)
WalWert ist ARRAY(0x1b932d4)
17
perldoc perllol habe ich gelesen, aber irgendwie hat mich das nicht weitergebracht...
Das Archiv hab ich durchwühlt, da hab ich immerhin das mit der Listenreferenz (fürs Reinstecken der Liste) gefunden.
Hab wohl gerade ne Denkblockade...
Kann mir bitte jemand einen Schubs in die richtige Richtung geben?
Wie kann ich die komplette Liste wieder rausholen, um den foreach drüberlaufen zu lassen?
Vielen Dank im Voraus.
Andreas
Hallo,
foreach ($testhash{"irl"})
foreach (@{$testhash{"irl"}})
wäre 'besser';-)
perldoc perllol habe ich gelesen, aber irgendwie hat mich das nicht weitergebracht...
perldoc perldsc bietet eine Beschreibung aller möglichen Kombinationen aus Arrays und Hashes.
Grüße
Klaus
hi!
$testhash{"irl"} = @irllist;
$testhash{"wal"} = @wallist;
foreach ($testhash{"irl"})
foreach ($testhash{"wal"})
In den foreach-Schleifen versuchst du, über $testhash{...} zu iterie-
ren. Darin steht aber nur ein einziges Element, und zwar die Referenz
auf ein Array. Und du möchtest eigentlich über dieses Array iterieren.
Also musst du vorher die Referenz wieder auflösen, um auf das Array
zuzugreifen. Das geht zb. folgendermaßen:
foreach (@{$testhash{"irl"}}) {
...
}
Das @{} wird hier als Dereferenzierungsoperator verwendet, um eine
Referenz auf ein Array wieder aufzulösen und zu einem einfachen Array
zu machen.
bye, Frank!
Vielen Dank Euch beiden,
Ihr habt mir sehr geholfen!
Andreas