Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: A more elegant way to filter a nested hash?

by mr_ron (Chaplain)
on May 31, 2018 at 19:22 UTC ( #1215565=note: print w/replies, xml ) Need Help??


in reply to A more elegant way to filter a nested hash?

I came across CPAN Deep::Hash::Utils giving the approach below which seems simple enough. I also looked at the modules suggested by Re: A more elegant way to filter a nested hash? ( data xpath, dpath, diver, walk, walker, visitor, jquery, pquery, json path, css csel, MarpaX::xPathLike) and like the suggestions on existing art.

use Deep::Hash::Utils qw(reach nest deepvalue); sub hash_filter { my ($source, $filter) = @_; my %rc; while (my @l = reach($filter)) { pop @l; if (defined( my $source_val = deepvalue($source, @l) ) ) { # hint: work around nest behavior on even vs odd key count nest(\%rc, @l)->{ $l[$#l] } = $source_val; } } \%rc; }
Ron

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1215565]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (3)
As of 2022-11-30 19:40 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?