[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