in reply to Ways to group elements of an AoH

Using an explicit intermediate hash cleans up the code somewhat (for some definition of clean):

use strict; use warnings; use Data::Dump::Streamer; my $allusers = [ {...} ]; # Data per sample my %users; for my $user (@$allusers) { my $name = $user->{user}; $users{$name}{$_} += $user->{$_} for qw(duration amount); } @$allusers = map { {user => $_, duration => $users{$_}{duration}, amount => $users{$_ +}{amount}} } sort keys %users; Dump $allusers;

Prints:

$ARRAY1 = [ { amount => 600, duration => 6, user => 'Michael' }, { amount => 700, duration => 7, user => 'Sarah' }, { amount => 800, duration => 8, user => 'William' } ];

Perl's payment curve coincides with its learning curve.