use Data::Dumper; my @a=(1..100); my @a3=reform_list(3,@a); print Dumper(@a3); my @a4=reform_list(4,@a); print Dumper(@a4); sub reform_list{ my $size=shift; my @list=@_; my @nlist=(); my $max=int(scalar(@list)/$size); for(my $c=0;$c<=$max;$c++){ my $a=$c*$size; my $b=($c+1)*$size-1; if($b>=scalar(@list)){ $b=scalar(@list)-1; } if($a<=$b){ push @nlist,[@list[$a..$b]]; } } return @nlist; } #### sub reform_list{ my $size=shift; my @list=@_; my @nlist=(); my $list_size=scalar(@list); my $c; my $stop=int($list_size/$size)*$size; for($c=0;$c<$stop;$c+=$size){ push @nlist,[@list[$c..($c+$size-1)]]; } if($c<$list_size){ push @nlist,[@list[$c..($list_size-1)]]; } return @nlist; }