use strict; use warnings; use Data::Dump::Streamer; my @AoA = ( [ "X", "Z", "W", "X", "Z", "Z" ], [ "Z", "Z", "X", "X", "X", "W" ], [ "X", "Z", "X", "W", "W", "W" ], [ "Z", "X", "W", "X", "Z", "Z" ], [ "Z", "X", "W", "X", "X", "W" ], [ "Z", "X", "X", "X", "Z", "W" ], ); my @sums; for my $row (0 .. $#AoA) { for my $col (0 .. $#{$AoA[$row]}) { ++${$sums[$col]}{$AoA[$row][$col]}; ++${$sums[$col]}{total}; } } Dump \@sums;