Try this, I had to fix your initial data. this outside braces were wrong.
#!/usr/bin/perl # http://perlmonks.org/?node_id=1198452 use strict; use warnings; my $foo = [ { name => 'a', type => 1, rockets => 2, leaves => 3 }, { name => 'b', type => 7, rockets => 4, leaves => 1, samples => [ { name => 'mary', dog => 'fifi' }, { name => 'john', fish => 'oscar' } ] } ]; sub fix { my ($obj) = @_; if( 'HASH' eq ref $obj ) { return $obj->{name} => { map fix($_), %$obj }; } elsif( 'ARRAY' eq ref $obj ) { return { map fix($_), @$obj } } else { return $obj; } } use Data::Dump 'pp'; print "before:\n"; pp $foo; my $newfoo = fix($foo); print "after\n"; pp $newfoo;
Outputs:
before: [ { leaves => 3, name => "a", rockets => 2, type => 1 }, { leaves => 1, name => "b", rockets => 4, samples => [ { dog => "fifi", name => "mary" }, { fish => "oscar", name => "john" }, ], type => 7, }, ] after: { a => { leaves => 3, name => "a", rockets => 2, type => 1 }, b => { leaves => 1, name => "b", rockets => 4, samples => { john => { fish => "oscar", name => "john" }, mary => { dog => "fifi", name => "mary" }, }, type => 7, }, }
In reply to Re: Recursive data structure munging - arrayrefs to hashrefs
by tybalt89
in thread Recursive data structure munging - arrayrefs to hashrefs
by flightdm
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |