in reply to map into a multidimensional hash
Hello nikmit,
Starting from Perl 5.8.1, map is context aware, and will "not" construct a list if called in void context.
use Data::Dumper; my @ary_of_hrefs = ( { id_1 => 'a', id_2 => 'b', f1 => 'p', f2 => 'i' }, { id_1 => 'a', id_2 => 'c', f1 => 'e', f2 => 'm' }, { id_1 => 'b', id_2 => 'b', f1 => 'r', f2 => 'h' }, { id_1 => 'b', id_2 => 'c', f1 => 'l', f2 => 'o' } ); my %hash; map { $hash{ delete $_->{id_1} }{ delete $_->{id_2} } = $_ } @ary_of_hrefs; print Dumper(\%hash), "\n";
Output:
$VAR1 = { 'a' => { 'b' => { 'f1' => 'p', 'f2' => 'i' }, 'c' => { 'f1' => 'e', 'f2' => 'm' } }, 'b' => { 'b' => { 'f1' => 'r', 'f2' => 'h' }, 'c' => { 'f1' => 'l', 'f2' => 'o' } } };
Map, in void context, is similar to a simple for loop.
for ( @ary_of_hrefs ) { $hash{ delete $_->{id_1} }{ delete $_->{id_2} } = $_; }
Regards, Mario.
Edit: Added link to Perl 5.8.1 changelog.
Edit: Modified input to have two fields.
|
|---|