I would like to change a perldata-structure recursively. In this example multiply everything by 100.
I found hints to traverse/read a data-structure, but nothing to change it in place. A good solution would also be to build up a parallel structure with changed data. Thanks for your help!
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; sub change_all_elements { my ( $data, $subref ) = @_; if ( ref($data) eq 'HASH' ) { for my $k ( keys %$data ) { change_all_elements( $data->{$k}, $subref ); } } elsif ( ref($data) eq 'ARRAY' ) { for my $line (@$data) { change_all_elements( $line, $subref ); } } elsif ( ref($data) eq '' ) { $subref->($data); } else { die "I dont know " . ref($data) . "\n"; } } my $deep = { a => 12, b => 13, c => { d => 14, e => 15, }, f => [ 16, 17, ] }; # I want to have all scalar elements to be 100x my $changed = change_all_elements( $deep, sub { 100 * $_[0]; } ); print "All changed:\n"; print Dumper($deep);
In reply to Recursively change perl-data-structure by richard90522
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |