Вот что я получаю:
print join( "\t", @$_{ sort keys %$_ } ), "\n" foreach @total;
Я просто перебираю @total
, и для каждого хэш-значения берут срез в отсортированном порядке и соединяют эти значения с помощью вкладок.
Если они вам не нужны в отсортированном порядке, вы можете просто
print join( "\t", values %$_ ), "\n" foreach @total;
Но я бы также сжал обработку строки следующим образом:
my ( $k1, $k2, @cols ) = split /\t/, $row;
my $key = "$k1\t$k2";
$totals[ $_ ]{ $key } += $cols[ $_ ] foreach 0..$#cols;
Но сList::MoreUtils
, вы также можете сделать это:
use List::MoreUtils qw<pairwise>;
my ( $k1, $k2, @cols ) = split /\t/, $row;
my $key = "$k1\t$k2";
pairwise { $a->{ $key } += $b } @totals => @cols;