in reply to Re: Recursive search in nested hash for selective keys
in thread Recursive search in nested hash for selective keys
If i pass a single hash ref to delve() , the expected output is returned. However, if i pass successive hash refs to delve() , the returned hash ref is a cumulative hash which has key-value pairs from previous function calls too.
I need the delve function to return the the hash corresponding to input hash and not a cumulative one.
I tried declaring the return hash with "my" but it does not work as the function is recursive.
The modified code for delve is mentioned below :
sub delve { my ($ref, $key) = @_; #my $key_val; if ('ARRAY' eq ref $ref) { for my $element (@$ref) { if ($key) { delve ($element, $key); } elsif (ref $element) { delve ($element) } } return ; } if ('HASH' eq ref ($ref)) { for my $nestedKey (keys %$ref) { my $value = $ref->{$nestedKey}; if ($nestedKey =~ /^-|\w/) { delve ($value, $nestedKey) } else { delve ($value, $key) } } return $key_val; } return if ref $ref; # Some other reference type - ignore it if ($key) { printf "%22s: %s\n", $ref, $key; $key_val->{$ref} = $key; return $key_val; } }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Recursive search in nested hash for selective keys
by GrandFather (Saint) on Aug 12, 2009 at 09:34 UTC | |
by perlpal (Scribe) on Aug 12, 2009 at 16:32 UTC |