Hallo Don!
Hatte heute wieder etwas Zeit, zwischendurch arbeite ich auch an einer ähnlichen, doch tiefer verschachtelten Struktur.
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"
So. Das Vorhaben ist mit meinen Bordmitteln unmöglich... 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:
my $searched = 'nights';
my $hash = \%TV;
my $seltsam;
getLocation($searched, $hash); # wir schnappen uns den/die/das Gesuchte und gehen ins Haus ($hash)
sub getLocation {
my $searched = shift;
my $wheretosearch = shift; # beim ersten Aufruf ist $wheretosearch unser Haus... aber beim zweiten oder dritten...
if (ref $wheretosearch eq 'HASH') { # könnte es ein in Kammern unterteiltes Zimmer sein
my %wheretosearch = %$wheretosearch;
for (keys %wheretosearch) {
print $wheretosearch{$_}, $/;
if ($_ eq $searched) {
print "$searched ist ein Schluessel von ", \%wheretosearch, $/;
$seltsam = \%wheretosearch;
getLocation($seltsam, $hash);
}
elsif ($wheretosearch{$_} eq $searched) {
print "$searched ist der Wert von $_ in %wheretosearch", $/;
}
else { getLocation($searched, $wheretosearch{$_}); }
}
}
elsif (ref $wheretosearch eq 'ARRAY') { # oder eine einfache Besenkammer
my $where = $_;
my @wheretosearch = @{$wheretosearch};
for (my $i = 0; $i < @wheretosearch; $i++) {
print "$searched is element $i in \@wheretosearch ($where)", $/ if $wheretosearch[$i] eq $searched;
getLocation($searched, $wheretosearch[$i]);
}
}
}
Ausgabe:
nights ist ein Schluessel von HASH(0x183f0e0)
nights ist ein Schluessel von HASH(0x183f188)
nights ist ein Schluessel von HASH(0x183f320)
Solele, und da kann ich mir die Haare raufen, denn obwohl ich hier Jeena zeige, warum $a != $b ist, tappe ich in die gleiche Falle, und denke die ganze Zeit mit diesen Zeilen:
print "$searched ist ein Schluessel von ", \%wheretosearch, $/;
$seltsam = \%wheretosearch;
getLocation($seltsam, $hash);
»Jetzt merke ich mir, wo das Gesuchte gefunden wurde, und gehe damit noch mal rein ins Haus«. Aber, aber, was habe ich Jeena erzählt? Eben. So geht's nicht... 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)
Viele Grüße aus Frankfurt/Main,
Patrick
![](http://www.atomic-eggs.com/fuernA.jpg)
_ - jenseits vom delirium - _
[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
Nichts ist unmöglich? Doch!
Heute schon gegökt?