MudGuard: Liste in Hash (und vor allem: wieder rausholen)

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

  1. 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

  2. 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!

  3. Vielen Dank Euch beiden,
    Ihr habt mir sehr geholfen!

    Andreas