# @data as used previously my %sums; my $sortKey; for my $datum (map {[++$sortKey, "$_->[0],$_->[1]", @$_]} @data) { if (exists $sums{$datum->[1]}) { $sums{$datum->[1]}[4] += $datum->[4]; $sums{$datum->[1]}[5] += $datum->[5]; } else { $sums{$datum->[1]} = $datum; } } my @result = map {[@{$_}[2 .. 5]]} sort {$a->[0] cmp $b->[0]} values %sums; Dump (\@result);