findthing($root, '$root->', ''); sub findthing { my $node = shift; my $debugString = shift; my $indent = shift; if (ref $node eq 'ARRAY') { for (0..$#$node) { my $result = findthing($node->[$_], $debugString . "\[$_\]", $indent .' '); return $result if defined $result; } print $indent . "No luck in array at $debugString\n"; }elsif (ref $node eq 'HASH') { for (keys %$node) { my $result = findthing($node->{$_}, $debugString . "\{$_\}", $indent . ' '); return $result if defined $result; } print $indent . "No luck in hash at $debugString\n"; } ... return undef; }