PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl: durch komplexen Hash iterieren (Referenzen!)



tschloss
21-04-2008, 00:12
Hi, ich bin verzweifelt! Und zu blöd vermutlich.

Ich habe aus XML::Simple eine Datenstruktur $ref-> hier mit Data::Dumper ausgegegeben.

$VAR1 = {
'photos' => {
'page' => '1',
'photo' => {
'24257747591' => {
'owner' => '258306934@N06',
'isfriend' => '1',
'ispublic' => '0',
'secret' => '6dxxxxc553',
'farm' => '3',
'server' => '2293',
'title' => 'DSCF0049',
'isfamily' => '0'
},
'24265886194' => {
'owner' => '258306934@N06',
'isfriend' => '1',
'ispublic' => '0',
'secret' => 'a53xxxx964',
'farm' => '3',
'server' => '2102',
'title' => 'DSCF0040',
'isfamily' => '0'
},
'24257750595' => {
'owner' => '258306934@N06',
'isfriend' => '1',
'ispublic' => '0',
'secret' => '6exxxxx0ab',
'farm' => '3',
'server' => '2246',
'title' => 'DSCF0035',
'isfamily' => '0'
}
},
'total' => '112',
'pages' => '12',
'perpage' => '10'
},
'stat' => 'ok'
};


Ich will jetzt durch diesen Hash bestehend aus 3 Elementen
'24257747591' => HASH
'24265886194' => HASH
'24257750595' => HASH
iterieren.

Diese Untertruktur sollte eigentlich "$ref->{photos}->{photo}" heißen. Dieser Ausdruck scheint eine Referenz zu sein und nicht vom Typ Hash.
Jedenfalls kommt bei Schleifenversuchen wie

while (($key,$value) = each( $ref->{photos}->{photo} )) {
print $key . "\n";
} oder
for $id ( keys $ref->{photos}->{photo} ) {...}
die Fehlermeldung, dass each oder keys einen Hash erwartet.

Wie dereferenziere ich denn hier? Ich bin auch gerne bereit, die Unterstruktur vorher in eine Hashvariable zu kopieren (Das ganze ist weder performance- noch speicherkritisch), aber auch das habe ich nicht hinbekommen.

Danke im voraus.
Gute Nacht
Thomas

tschloss
21-04-2008, 08:31
Siehe hier
http://board.perl-community.de/thread/11672/

Danke
Thomas