my %HoH; foreach my $hashref ( @AoH ) { $HoH{ ${ $hashref }{id_a} }{id_a} = ${ $hashref }{id_a}; $HoH{ ${ $hashref }{id_a} }{id_b} = ${ $hashref }{id_b}; $HoH{ ${ $hashref }{id_a} }{value_x} += ${ $hashref }{value_x}; $HoH{ ${ $hashref }{id_a} }{value_y} += ${ $hashref }{value_y}; } @AoH = sort { ${ $a }{id_a} <=> ${ $b }{id_a} } ( values %HoH ); #### my %HoH; foreach my $hashref ( @AoH ) { my $id_ab = ${ $hashref }{id_a} . '_' . ${ $hashref }{id_b}; $HoH{$id_ab}{id_a} = ${ $hashref }{id_a}; $HoH{$id_ab}{id_b} = ${ $hashref }{id_b}; $HoH{$id_ab}{value_x} += ${ $hashref }{value_x}; $HoH{$id_ab}{value_y} += ${ $hashref }{value_y}; } @AoH = sort { ${ $a }{id_a} <=> ${ $b }{id_a} } ( values %HoH );