[Dresden-pm] Array-Verweis dereferenzieren?

Steffen Winkler steffen.winkler at gmx.net
Die Feb 8 09:55:15 PST 2005


Also Arrayreferenzen werden mit @{$arrayreferenz} dereferenziert und
hashreferenzen mit %{$hashreferenz}, sas ist soweit schon mal ok.
Wahrscheinlich ist Deine Struktur anderes als erwartet.

Also mache mal

use Data::Dumper;
print $arrayreferenz;

dann siehst Du genau, was da dahinter liegt. Bei uneindeutigen Strukturen
kannst Du vor dem dereferenzieren abfragen, ob's eine ist
$arrayreferenz eq 'ARRAY'
$hashreferenz eq 'HASH'



Steffen Winkler
Hohlweg 23
D - 09306 Seelitz

Telefon: +49 (0)3737   77 16 17
Telefax: +49 (0)1212   5 11 71 89 86

e-Mail: info at steffen-winkler.de
url: http://www.steffen-winkler.de
-----Ursprüngliche Nachricht-----
Von: Kristian Rink <afterimage at gmx.net>
An: Perl Mongers <dresden-pm at mail.pm.org>
Datum: Dienstag, 8. Februar 2005 13:44
Betreff: [Dresden-pm] Array-Verweis dereferenzieren?



Salut alle;

eine reichlich triviale Frage, die mir trotz allem mehr Kopfzerbrechen
bereitet, als ich das anfänglich erwartet hätte. Situation: Ich hab eine
relativ sperrige Datenstruktur, in der ich mein Website-Navigations-Menü
mit mir herumtrage. Das Dingens ist im Wesentlichen ein Array voller
Hash-Referenzen (für jeden Menü-Punkt einer), und innerhalb dieser
Hashs gibt's für Untermenüs wiederum ein Array voller Hash-Referenzen.
Ob das übermäßig clever/performant/stabil/whatever ist, sei mal
dahingestellt. Mit dem Untermenü-Array funktioniert etwas der Art

print $menuitem->{"submenu"};

und gibt mir die korrekte zahl von Elementen im Untermenü aus. Was aber
nicht klappt, ist die Verwendung der ganzen Sache innerhalb von "for",
also (was naheliegend ist)

[I] for my $item (@{$menuitem->{"submenu"}}) { blablurb; }

ebensowenig wie (was ich eigentlich auch nicht vermutet hatte)

[II] for my $item ($menuitem->{"submenu"}) { blablurb; },

wobei ich in zweiterem Falle $item erwartungsgemäß mit der Anzahl der
Elemente in dem Array füttere.

Frage aber nun: Was habe ich übersehen?  Und, wichtiger: Warum
funktioniert [I] nicht? Kann mich jemand erleuchten?

Danke und tschö,
Kris