Frage zu Perl mit Referenzen auf Hashes

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Rebell
Beiträge: 997
Registriert: 14.01.2003 20:36:53
Wohnort: Dresden

Frage zu Perl mit Referenzen auf Hashes

Beitrag von Rebell » 16.10.2004 20:39:01

Hallo.

Ich hab eine Funktion, die aus Verzeichnisinhalten eine Hash-Struktur macht. Das Ergebnis sieht wie folgt aus:

Code: Alles auswählen

$VAR1 = {
          'volume' => {
                        'files' => 4,
                        'dirs' => 2,
                        'root' => [
                                    {
                                      'file' => {
                                                  'file.txt' => '',
                                                  '.fasdeckt' => ''
                                                },
                                      'path' => 'testdir/',
                                      'directory' => {
                                                       'verzeichnis' => {
                                                                          'file' => {
                                                                                      'muhfile.muh' => ''
                                                                                    }
                                                                        },
                                                       'test2' => {
                                                                    'file' => {
                                                                                'mike.txt' => ''
                                                                              }
                                                                  }
                                                     }
                                    }
                                  ]
                      }
        };

Sieht schonmal sehr schick aus. Jedoch benötige ich die interessanten Informationen die sich im inneren des Baumes unterhalb von "root" befinden. Beispielsweise will ich alle Eigenschaften von "root" auslesen.

Dazu habe ich mir eine Referenz auf "root" angelegt. Siehe:

Code: Alles auswählen

$hash = \$dir_structure->{volume}->{root}->[0];
$hash ist dann:

Code: Alles auswählen

$VAR1 = \{
            'file' => {
                        'file.txt' => '',
                        '.fasdeckt' => ''
                      },
            'path' => 'testdir/',
            'directory' => {
                             'verzeichnis' => {
                                                'file' => {
                                                            'muhfile.muh' => ''
                                                          }
                                              },
                             'test2' => {
                                          'file' => {
                                                      'mike.txt' => ''
                                                    }
                                        }
                           }
          };
Leider kann ich kein foreach auf dieses Hash anwenden.

Code: Alles auswählen

foreach $key (keys %hash) {
   print "Schlüssel: " . $key . " Wert: $hash{$key}\n";
}
Gibt gar nichts aus.
come to daddy, windowlicker!
get m:ke - http://get-mike.de

martinvi
Beiträge: 12
Registriert: 16.10.2004 17:30:22

Re: Frage zu Perl mit Referenzen auf Hashes

Beitrag von martinvi » 16.10.2004 21:32:26

Hallo zusammen :-)
Rebell hat geschrieben: (...) Leider kann ich kein foreach auf dieses Hash anwenden. (...)
Ja, $hash ist kein hash, sondern eine Referenz. Wenn ich

Code: Alles auswählen

$hash = \$dir_structure->{volume}->{root}->[0];
gerade richtig verstehe, ist $hash nicht mal eine Referenz auf einen hash, sondern eine Referenz auf ein array (bzw. einen Listenkontext).

Unabhängig davon musst Du $hash bei der Ausgabe dereferenzieren.

Guck mal `perldoc perlref` und Referenzen bei perlmonks.org.

HTH.

cya ;-)
Martin "vi"

Benutzeravatar
Rebell
Beiträge: 997
Registriert: 14.01.2003 20:36:53
Wohnort: Dresden

Ich habs

Beitrag von Rebell » 17.10.2004 09:18:24

Code: Alles auswählen

foreach $key (keys %{$$hash}) {
   print "Schlüssel: " . $key . " Wert: $hash{$key}\n";
}
Muss die Referenz erst auflösen und in ein Hash umwandeln. foreach keys verlangt unbedingt ein Hash.
gerade richtig verstehe, ist $hash nicht mal eine Referenz auf einen hash, sondern eine Referenz auf ein array (bzw. einen Listenkontext).
Und der Listenkontext beinhaltet wiederrum ein Hash ;) Es lebe die Skriptsprache...

Danke für den Link.
come to daddy, windowlicker!
get m:ke - http://get-mike.de

Antworten