... sub groupsOf (&$@); ... sub groupsOf (&$@) { my $rcToRun = shift; my $groupsOf = shift; my $rcDoIt; $rcDoIt = sub { $rcToRun->( map shift, 1 .. min scalar( @_ ), $groupsOf ), @_ ? &$rcDoIt : (); }; &$rcDoIt; } ...