Thread Zweistufige Hash-Referenz zuweisen (36 answers)
Opened by mikdoe at 2009-06-03 20:50

mikdoe
 2009-06-03 20:50
#122286 #122286
User since
2007-08-13
98 Artikel
BenutzerIn
[default_avatar]
Guten Abend!

Hab mir schon einen Wolf hier im Forum und im Netz gesucht und bisher keine schlaue Antwort gefunden.

Workaround: Ich bekomme aus dem Modul SOAP::Lite eine Referenz geliefert. Diese kann ich in der ersten Ebene auch hiermit super auslesen:

Code (perl): (dl )
1
2
3
4
5
6
my @keys = keys (%$hash_ref);
foreach my $k (sort {lc $keys[$a] cmp lc $keys[$b]} 0..$#keys) {
        print "$keys[$k] => ";
                print (defined $hash_ref -> {$keys[$k]} ? $hash_ref -> {$keys[$k]} : 'NOT DEFINED');
        print "\n";
}


Allerdings gibt es einige Keys, die wiederum Unterebenen haben. Mit Data::Dumper konnte ich ermitteln, dass es insgesamt max. 2 Stufen sind, wovon ich die erste ja - wie gesagt - bereits super auslesen kann.

Nun habe ich mittels
Code (perl): (dl )
1
2
3
if (ref($hash_ref -> {$keys[$k]}) eq 'ARRAY') {
my @keys2 = keys (%$keys[$k]);
}

versucht, mir die Keys der zweiten Ebene zu holen, um wiederum in einer inneren Schleife die Untermengen anzuzeigen.
Resultat (erwarten Profis bereits) für die Zuweisung:
Global symbol "$keys" requires explicit package name
und
syntax error at blabla.pl line 28, near "$keys["

Was mache ich denn da falsch?
Zwar würde mir reichen, bis zur zweiten Tiefe auszulesen, für mein Verständnis hätte ich aber dann doch gern noch eine Möglichkeit gefunden, auf ganz einfache Art und Weise die ganze Referenz dem Hash %result zuzuordnen, um diese Referenzen ganz los zu werden und mit einem konservativen Hash á la "foreach keys print value" arbeiten zu können. Hat Data::Dumper nicht eine Möglichkeit dafür? Hab im Manual nichts dazu gefunden.

Vielen Dank für any suggests

mod-edit pq: perl-tags hinzugefügt
Last edited: 2009-06-03 21:17:11 +0200 (CEST)

View full thread Zweistufige Hash-Referenz zuweisen