sub mapn (&$@) { my( $code, $n, ) = ( shift, shift ); map { $code->( @_[ $_ .. $_ + $n -1 ] ); } map $n * $_, 0 .. ( $#_ / $n ); } my $s = join',', 1 .. 11; my( @odds, @evens ); mapn{ push @odds, shift||(); push @evens, shift||(); } 2, split ',', $s; print "@odds\n@evens";; 1 3 5 7 9 11 2 4 6 8 10