bduggan has asked for the wisdom of the Perl Monks concerning the following question:
sub change_hash_values { my $sub = shift; my $h = shift; my $match = shift; return unless ref($h); for ( ref($h) ) { /HASH/ and do { for ( keys %$h ){ change_hash_values ( $sub, $h->{$_}, $match ); $h->{$_} = $sub->( $h->{$_} ) if /$match/; } }; /ARRAY/ and do { change_hash_values ( $sub, $_, $match ) for @$h; }; } } my $z = { foo => [qw(a b c)], bar => [ 'a' , { changeme => 'oz' } ], baz => 'z' }; change_hash_values( sub { $_[0]=~s/z/x/g; return $_[0]; },$z, qr/chang +e/); # Turns oz into ox
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: DataStructure::RecursivelyTransform?
by BrowserUk (Patriarch) on May 02, 2006 at 17:05 UTC |