sub groups_of_n { sub min { return $_[0] < $_[1] ? $_[0] : $_[1]; } my $n = shift; return map { [ @_[$_*$n..min($_*$n+$n-1,$#_)]] } 0..$#_/$n; }