alex: Hash of Hashes

Howdy

Kann mir jemand mal ein Beispiel liefern, wie ich Hash of Hashes anlege und auch auslesen kann? In meinen Buchreferenzen finde ich nur folgenden Code:

%HASH = (
    flintstones => {
        "lead"      => "fred",
        "pal"       => "barney",
    },
    jetsons => {
        "lead"      => "george",
        "wife"      => "jane",
        "his boy" => "elroy",  # key quotes needed
    },
    simpsons => {
        "lead"      => "homer",
        "wife"      => "marge",
        "kid"       => "bart"
    }
);

Nur wie lese ich das aus?
print "\n $HASH{simpsons}{lead} \n";
erzeugt leider einen uninitialized fehler .-(

Danke, alex

  1. use Mosche;

    Kann mir jemand mal ein Beispiel liefern, wie ich Hash of Hashes anlege und auch auslesen kann? In meinen Buchreferenzen finde ich nur folgenden Code:

    Nur wie lese ich das aus?
    print "\n $HASH{simpsons}{lead} \n";
    erzeugt leider einen uninitialized fehler .-(

    Das solltest du noch mal ausprobieren, bei mir funktioniert es nämlich genau so. Du solltest nicht vergessen, dass das, was du verwendest, nur eine Abkürzung für $HASH{'simpsons'}->{'lead'} ist. Probier es mal so.

    Benutze auch mal Data::Dumper.

    use Data::Dumper;
    print Dumper(%HASH);

    Dann siehst du, ob dein Hash angekommen ist. Benutze auch strict und warnings. (use strict; und den Schalter '-w' / bzw. use warnings; )

    use Tschoe qw(Matti);

  2. Hallo,

    Kann mir jemand mal ein Beispiel liefern, wie ich Hash of Hashes anlege und auch auslesen kann?

    Eine ausführliche Sammlung von Beispielen findest Du in der Dokumentation von Perl, und zwar in
    perldoc perldsc
    bzw.
    http://www.perldoc.com/perl5.6.1/pod/perldsc.html

    Da sind neben den Hashes of Hashes auch gleich alle anderen möglichen Variante beschrieben.

    Grüße
      Klaus

  3. Howdy

    %HASH = (...

    Danke für die schnelle Antwort, ich habe aber inzwischen rausgefunden, das man Hashs nicht groß definieren darf

    %HASH ist falsch

    %hoh funktioniert nämlich korrekt!

    danke
    alex

    1. use Mosche;

      ich habe aber inzwischen rausgefunden, das man Hashs nicht groß [geschrieben] definieren darf

      Wo steht das denn? Abgesehen davon, dass großgeschriebene Variablen in den meisten Fällen unschön sind (IMHO), hat dein Beispiel bei mir funktioniert (mit warnings und strict). Könntest du bitte die Quelle deines neuen Wissens bekannt geben?

      use Tschoe qw(Matti);

      1. Trugschluß, mein Fehler.

        Irgendwie klappt das hier nicht ganz.
        Ich wollte eine Datenbank mittels DB_File und tie %HASH erstellen, aber das macht Probleme bei Hash of Hashes, oder?

        Ich poste mal das Skript:

        ########

        #!/usr/bin/perl -w

        use DB_File;

        tie %HASH, "DB_File", "db.file" or die "Can't open FILENAME: $!\n";

        %hoh = (
            simpsons => {
                "lead"      => "homer",
                "wife"      => "marge",
                "kid"       => "bart"
         }
        );

        $HASH{hoh}= %hoh;

        if(exists $HASH{hoh})
        {
          print "$HASH{hoh}{simpsons}{kid}";
        }

        untie %HASH;

        #######

        Wieso klappt das nicht? Er gibt mir diese uninitialisiert-Fehlermeldung. Was muß ich denn anders machen?

        gruß
        alex