Hallo Siechfred!
Btw, wenn Du den Inhalt wissen willst, müsstest Du schon dereferenzieren :)
Ja klar:
my $someone = 'marge';
walk \&wanted, %hash;
sub wanted {
if ($_ eq $someone) {
my %mother = %$Data::Walk::container;
for (keys %mother) {
print "$_: $mother{$_}\n";
}
}
}
^Z
name: marge
role: wife
age: 37
Ich gehe kühn davon aus, dass Data::Walk um einiges schneller ist als Deine selbstgebaute Funktion.
Bezweifle ich nicht, nur die Funktion schreiben ging schneller als Data::Walk zu verstehen... Ich kann mir unter diesen Optionen (preprocess, postprocess) nichts vorstellen, und ja, es fehlt an konkreten Beispielen. Deswegen nehmen wir das eben gepostet und kehren zurück zur Ausgangsfrage:
von 'marge' (Mutter von 'bart', Frau von 'homer') ausgehend, wie erhalte ich die ganze Familie? Z.B.:
'marge' (wife, 37) is member of 'simpsons'. Other members are: 'homer' (husband, 34), 'bart' (kid, 11)
Ich habe den Eindruck, dass es ohne komplexere Funktion nicht geht, und eben da fehlt mir der Denkschubs ;)
Bisher bin ich so weit:
my $someone = 'marge';
walk \&wanted, %hash;
my $foo;
sub wanted {
if ($_ eq $someone) {
$foo = $Data::Walk::container;
my %person = %$foo;
for (keys %person) {
print "$_: $person{$_}\n";
}
walk \&wanted2, %hash;
}
}
sub wanted2 {
if ($_ eq $foo) {
my $bar = $Data::Walk::container;
@members = @$bar;
foreach my $member(@members) {
my %member = %$member;
for (keys %member) {
print "$_: $member{$_}\n";
}
}
}
}
^Z
name: marge
role: wife
age: 37
name: homer
role: husband
age: 34
name: marge
role: wife
age: 37
name: bart
role: kid
age: ARRAY(0x183cbec)
Ich kriege es aber nicht rekursiv...
BTW: Werden die Speicherplätze bei jedem Skriptaufruf neu zugewiesen? Vergl.: ARRAY(0x187b0c8) und ARRAY(0x1831d30) für das Array, das 'sponge bob' enthält.
OK. Hatte mich gewundert, dass die Zahlen manchmal gleich sind, manchmal nicht, danke.
Viele Grüße aus Frankfurt/Main,
Patrick
_ - jenseits vom delirium - _
[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
Nichts ist unmöglich? Doch!
Heute schon gegökt?