Alex: keys eines mehrdimensionalen Hash's auslesen

Guten Tag,

ich habe ein Script, das aus mehreren externen Datenquellen einen mehrdimensionalen Hash erzeugt. Der Hash wird in einer Schleife mit folgenden Werten belegt:

$Daten{$name}{'klamotten'}{$kleidungsstueck} = 'ja';  # Werte: 'ja' oder 'nein'
$Daten{$name}{'geburtsdatum'} = $geburtsdatum;
$Daten{$name}{'lieblingsgetraenk'} = $getraenk;

Soweit zum Einlesen. Jetzt kommt die Auswertung. Die Namen kann ich auslesen mit:

@allenamen = keys(%Daten);

Jetzt möchte ich gern für jeden Name herausbekommen, was er für Klamotten hat:

foreach $name (@allenamen) {
 @klamotten = keys(%Daten{$name}{'klamotten'});

Das funktioniert leider nicht, obwohl es mir logisch erscheint. Habt ihr eine Idee, wie ich an die keys der 'klamotten' komme?

Grüße Alex

  1. foreach $name (@allenamen) {
    @klamotten = keys(%Daten{$name}{'klamotten'});

    Das funktioniert leider nicht, obwohl es mir logisch erscheint. Habt ihr eine Idee, wie ich an die keys der 'klamotten' komme?

    Lieder kenn ich perldoc nicht so gut als das ich dir sagen könnte wo du nachguckst. Aber dafür:

    @klamotten = keys %{Daten{$name}->{klamotten}};

    so sieht's besser aus, das mit den Pfeilen sollltest du dir mal angucken, du kannst so nicht unterscheiden, ob du eine Referenz oder ein HASH hast, was manchmal zu blöden Verwechslungen kommen kann.

    Also dein Codeschnipsel von oben sollte etwa so aussehen:

    $Daten{$name} = {};

    $Daten{$name}->{'klamotten'}->{$kleidungsstueck} = 'ja';  # Werte: 'ja' oder 'nein'
    $Daten{$name}->{'geburtsdatum'} = $geburtsdatum;
    $Daten{$name}->{'lieblingsgetraenk'} = $getraenk;

    Struppi.

    1. @klamotten = keys %{Daten{$name}->{klamotten}};

      Hab vor Daten noch ein $ eingefügt:

      @klamotten = keys %{$Daten{$name}->{'klamotten'}};

      Jetzt klappts. Dankeschön! Alex

  2. Hi,

    Das funktioniert leider nicht, obwohl es mir logisch erscheint. Habt ihr eine Idee, wie ich an die keys der 'klamotten' komme?

    Wie es geht, hat dir ja schon Struppi gesagt.
    Aber ein genereller Tipp bei solchen Problemen ist, über das Modul Data::Dumper die Referenz ausgeben zu lassen. Mit der Hilfe dieser Ausgabe kann man sehr oft erkennen, wie man auf die einzelnen Elemente eines Records zugreifen kann.

    Grüße Andres Freund

    --
    ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|