Don P: In komplexer Datenstruktur suchen

Beitrag lesen

Hallo Patrick,

Hatte heute wieder etwas Zeit,

Ich leider nicht, aber ich sehe, du kommst auch selber ganz gut weiter :-)

Mit dem folgenden Skript kann ich jeden Wert ermitteln (ob Wert von Hash-Schlüssel oder Element im Array) und auch die Hash-Schlüssel selbst

Genau so hatte ich mir die Grundfunktion vorgestellt.

»Jetzt merke ich mir, wo das Gesuchte gefunden wurde, und gehe damit noch mal rein ins Haus«. [...] Füge mal dem Skript folgenden Code hinzu:

print "Und jetzt schaunmermal:", $/;

print '$TV{simpsons}: ', $TV{simpsons}, $/;       # alle sind Hashs mit dem Schluessel: 'nights'
print '$TV{flintstones}: ', $TV{flintstones}, $/;
print '$TV{jetsons}: ', $TV{jetsons}, $/;


>   
> springt es einem sofort ins Auge:  
>   
> nights ist ein Schluessel von HASH(0x183f08c)  
> nights ist ein Schluessel von HASH(0x183f134)  
> nights ist ein Schluessel von HASH(0x183f2cc)  
> Und jetzt schaunmermal:  
> $TV{simpsons}: HASH(0x183215c)  
> $TV{flintstones}: HASH(0x1831eb0)  
> $TV{jetsons}: HASH(0x183200c)  
  
Wahrscheinlich hast du die Zeilen nach "Und jetzt schaunmermal" ganz außerhalb von getLocation notiert. Da das Haus dieser Funktion erst mal übergeben wird, ist die Adresse des übergebenen Hashs dann schon wieder anders, irgendwie so.  
  
Ich dachte ohnehin nicht daran, die Ausgabe in Form von "HASH(0xblabla)" zu machen, sondern jeweils den Schlüssel als String auszugeben, in dem der Wert irgendwo tiefer gefunden wurde. Der erste Schlüssel ist allerdings nicht ohne weiteres bekannt (TV), aber tiefer in der Verschachtelung hat man ihn ja immer im Zugriff.  
  
Was deiner Funktion jetzt noch fehlt, ist ein Rückgabewert, der signalisiert, ob und wo (als Hash-Schlüssel, Hash-Wert oder Array-Wert) das gesuchte  gefunden wurde. Die Ausgabe könnte dann etwa so lauten:  
  
"X ist ein  
Wert des Vektors (2,3,5,7,9) des 5-dimensionalen Arrays im Schlüssel Y im Schlüssel Z im Wert des Vektors (2,4) des 2-dimensionalen Arrays im Schlüssel Bla".  
  
Gruß, Don P