Hallo Patrick,
Na also, es geht doch ;-)
Allerdings ist das jetzt schon sehr konkret, d.h. du weißt im neuen Beispiel genau
a) dass du eine Person suchst,
b) wo Personen in der Struktur zu finden sind,
c) dass du den Namen der gesuchten Person übergibst,
d) dass Personen bestimmte Rollen in einer Familie haben,
und schließlich,
e) dass du alle anderen Personen- und Familiennamen mit derselben Rolle ausgeben willst
Für e) musstest du sogar eine konkrete Routine schreiben, d.h. wenn du dann z.B. noch alle Personen desselben Alters haben wollest (nur die jüngeren Frauen natürlich ;-) – die Machokasse füllt sich langsam), müsste dafür wieder einen separate Funktion geschrieben werden.
Für solche ganz konkreten Abfragen mit viel Wissen über die Datenstruktur braucht man natürlich keine Rekursion. Wenn aber z.B. das Wissen b) gänzlich fehlt, könnte eine rekursive Lösung trotzdem die gewünschte Ausgabe liefern. Z.B könnte ja für jede Familie noch ein Schlüssel neighbours existieren, der ebenfalls persons und roles kennt. Dann könnte eine rekursive Lösung auch die entsprechenden Nachbarsfrauen ausgeben.
Den OP hatte ich nämlich viel allgemeiner verstanden:
Ich habe einen Wert, und will wissen, welche die enthaltende Struktur ist:
'bart' ist der Wert des Schlüssels 'name' des anonymen Hashs, der den Index 2 im anonymen Array hat, welcher der Wert vom Schlüssel 'members' des anonymen Hashs ist, der wiederum den Wert vom Schlüssel 'simpsons' des Hashs %TV darstellt - uff... ;)
Das verstand ich so: Wenn man z.B. "nights" übergibt, könnte eine allgemeine Funktion ausgeben:
"nights ist ein Schlüssel in flintsones
nights ist ein Schlüssel in jetsons
nights ist ein Schlüssel in simpsons"
Und das, ohne dass man vorher das geringste über die Stuktur weiß. Anschließend weiß man dann, dass die Struktur eine Liste mit (u.A. vielleicht) den Schlüsseln flintsones, jetsons und simpsons ist, und dass diese wiederum jeweils einen Schlüssel namens nights haben.
Habe gerade ein bisschen in perlref(1) gestöbert, weil mein "Programmieren mit Perl" noch verliehen ist. Jetzt verstehe ich endlich deinen code :-).
Das verflixte an Perl ist, dass es viele Wege gibt, dasselbe auszudrücken, und dass sich diese für das Auge Wege nur im Detail unterscheiden. Andere Detail-Unterschiede dagegen könne wieder gravierende Unterschiede in der Bedeutung bzw. Auswirkung haben. Wenn man (wie ich) nicht täglich perlt, vergisst man leicht die genaue Bedeutung der "komischen Zeichen" in bestimmten Zusammenhängen und steht dann plötzlich wie der sprichwörtliche "Ochs vor'm Berg" vor einem an sich einfachen Code.
Gruß, Don P
sh:( fo:) ch:? rl:( br:] n4:~ ie:% mo:? va:{ js:) de:/ zu:] fl:( ss:| ls:&