use Text::CSV_XS qw( csv ); my %acc; my $aoa = csv (in => "test.csv", on_in => sub { $acc{pack "L>L>", $_[1][0], $_[1][1]} += $_[1][2]; }); csv (in => [ map { [(unpack "L>L>", $_), $acc{$_}] } sort keys %acc ]);