Danny: mehrdimensionalen Hash traversieren

Hi,

eine Config-Datei wird in einen mehrstufigen Hash geparst:

$gruppe{$untergruppe}{$mitglied};

Der Hash wird korrekt aufgebaut, das habe ich bereits geprüft.
Jetzt sollen die Mitglieder dynamisch durchlaufen werden:

$untergruppe = "test";
while ( ($key, $val) = each ($gruppe{$untergruppe}) )
{
  print " $key = $val <br>";
  while ( ($k, $v) = each ($val) )
  {
    print " $k = $v <br>";
  }
}

Der Code verursache eine Fehlermeldung (über CGI, daher keine genaue Fehlermeldung, bzw. nur interner Server-Error)

Was muß ich ändern, damit es funktioniert?

Ich vermute als Fehlerursache $val, weil es in der Schleife zum Skalar wird. Mit %val funktionert es aber auch nicht.

Im voraus vielen Dank für jegliche Hinweise.

MfG
Danny

  1. Hi,

    eine Config-Datei wird in einen mehrstufigen Hash geparst:

    $gruppe{$untergruppe}{$mitglied};

    Der Hash wird korrekt aufgebaut, das habe ich bereits geprüft.
    Jetzt sollen die Mitglieder dynamisch durchlaufen werden:

    #Alles wieder im gleichen Format ausgeben
    foreach $sec (keys %data)
    { print "[$sec]\n";
      foreach $key (keys %{$data{$sec}})
      { print "$key=$data{$sec}{$key}\n"; }
    }

    It means
    foreach my $untergruppe(keys %gruppe){
     print "Untergruppe: $untergruppe\n";
     foreach my $member(keys %{gruppe{$untergruppe}}){
      print "Member: $member\n";
     }
    }

    Erwin

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
    1. Wow! Danke für die schnelle Antwort. Respekt!

  2. $gruppe{$untergruppe}{$mitglied};

    Der Hash wird korrekt aufgebaut, das habe ich bereits geprüft.
    Jetzt sollen die Mitglieder dynamisch durchlaufen werden:

    $untergruppe = "test";
    while ( ($key, $val) = each ($gruppe{$untergruppe}) )

    while ( my ($key, $val) = each %{$gruppe{$untergruppe})

    {
      print " $key = $val <br>";

    while ( ($k, $v) = each ($val) )

    while ( my ($k, $v) = each %$val )

    {
        print " $k = $v <br>";
      }
    }

    Der Code verursache eine Fehlermeldung (über CGI, daher keine genaue Fehlermeldung, bzw. nur interner Server-Error)

    Ja, du kannst die Fehler in dem Logfile deines Servers finden, aber es gibt auch andere Möglichkeiten.

    use CGI::Carp qw/fatalsToBrowser/;

    Außerdem solltest du dringend use strict verwenden damit kannst du dir einen Haufen Tippfehler ersparen.

    Struppi.

    1. Danke Struppi!

      Hab gerade die fatals zum Browser geschickt und einen Compiler-Fehler gemeldet bekommen. Nach der Anpassung auf

      %{$gruppe{'untergruppe'}} etc.

      funktioniert's jetzt :)