use warnings; use strict; use Test::More tests => 2; my ($cols,$rows) = (4,3); my @list = (1..12); my @AoA = map { [ @list[ $_*$cols .. ($_+1)*$cols-1 ] ] } 0..$rows-1; is_deeply \@AoA, [[1 .. 4], [5 .. 8], [9 .. 12]] or diag explain \@AoA; is_deeply \@list, [1..12];