Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Manipulate deepest values in complex hash structures

by hdb (Prior)
on Apr 29, 2013 at 20:48 UTC ( #1031284=note: print w/ replies, xml ) Need Help??


in reply to Manipulate deepest values in complex hash structures

One method is to use recursion in combination with dispatch tables:

use strict; use warnings; my %dispatch = ( # scalar '' => sub { my ( $element, $op ) = @_; $op->( $element ); }, 'HASH' => sub { my ( $element, $op ) = @_; for my $key (keys %{$element}) { search_and_replace_in_hash( $element->{$key}, $op ); } }, 'ARRAY' => sub { my ( $element, $op ) = @_; search_and_replace_in_hash( $_, $op) for @{$element}; }, 'default' => sub { my ( $element, $op ) = @_; print STDERR ref($element).": unknown type of reference\ +n" }, ); # operates on references sub search_and_replace_in_hash { &{ $dispatch{ ref($_[0]) } // $dispatch{'default'} }(@_); } my $var = { "0x55555555" => { "0x55555555" => [ ["0xAAAAAAAA", "0x9"], + ], "0xAAAAAAAA" => [ ["0xAAAAAAAA", "0x8"], ], }, "0xAAAAAAAA" => { "0x55555555" => [ ["0xFFFFFFFF", "0x8"], ], "0xAAAAAAAA" => [ ["0x55555554", "0x3"], ], }, }; search_and_replace_in_hash( $var, sub { $_ =~ s/0x//; } ); search_and_replace_in_hash( $var, sub { print "$_\n"; } ); # no need f +or Data::Dumper

For other types of references, you need to expand the dispatch table accordingly.

Thanks to Rolf for his helpful comments above.


Comment on Re: Manipulate deepest values in complex hash structures
Download Code
Replies are listed 'Best First'.
Re^2: Manipulate deepest values in complex hash structures
by RecursionBane (Sexton) on Apr 29, 2013 at 21:00 UTC
    Thank you, hdb! This is the first time I'm seeing dispatch tables; that's really neat!

    ~RecursionBane

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (15)
As of 2015-07-28 16:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (258 votes), past polls