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";
####
$VAR1 = {
'a' => {
'b' => {
'f1' => 'p',
'f2' => 'i'
},
'c' => {
'f1' => 'e',
'f2' => 'm'
}
},
'b' => {
'b' => {
'f1' => 'r',
'f2' => 'h'
},
'c' => {
'f1' => 'l',
'f2' => 'o'
}
}
};
####
for ( @ary_of_hrefs ) {
$hash{ delete $_->{id_1} }{ delete $_->{id_2} } = $_;
}