use Data::Dumper; $data::Dumper::Terse=1; $Data::Dumper::Indent=0; sub mapn (&@) { my( $c, $n, $s ) = ( shift, shift, 0 ); map{ $s += $n; $c->( @_[ ( $s - $n ) .. ( $s < @_ ? $s - 1 : @_ - 1 ) ] ); } 0 .. ( $#_ / $n ); } my @a = (1,5,7,9,32,197,8,4,5); for my $n ( 2 .. 7 ) { my $LoL = [ mapn{ [ @_ ] } $n, @a ]; print "n=$n ", Dumper $LoL; } __END__ n=2 $VAR1 = [[1,5],[7,9],[32,197],[8,4],[5]]; n=3 $VAR1 = [[1,5,7],[9,32,197],[8,4,5]]; n=4 $VAR1 = [[1,5,7,9],[32,197,8,4],[5]]; n=5 $VAR1 = [[1,5,7,9,32],[197,8,4,5]]; n=6 $VAR1 = [[1,5,7,9,32,197],[8,4,5]]; n=7 $VAR1 = [[1,5,7,9,32,197,8],[4,5]];