my @AoA; for (0 .. $#list) { push @AoA, [] if $_ % $C == 0; push @{ $AoA[-1] }, $list[$_]; } #### my @AoA = []; for (@list) { push @AoA, [] if $C == @{ $AoA[-1] }; push @{ $AoA[-1] }, $_; }