sub groups_of_n { my $n = shift; return map { [@_[$_*$n..$_*$n+$n-1]] } 0..$#_/$n; } use POSIX qw(ceil); sub groups_of_n { my $n = shift; my $m = ceil(@_/$n); my @r; my $i = 0; push(@{$r[$i++%$m]},$_) foreach @_; @r; }