use strict; use warnings; my @array = map { sprintf q{%02d}, $_ } 1 .. 17; print q{=} x 25, qq{\n}; for ( 1 .. 10 ) { print qq{Partition size = $_\n}; my @newArray = partitionArray( $_, @array ); printAoA( @newArray ); } sub partitionArray { my( $partSize, @array ) = @_; my @partitioned = (); while( scalar @array > $partSize ) { push @partitioned, [ splice @array, 0, $partSize ]; } push @partitioned, \ @array; return @partitioned; } sub printAoA { foreach my $raSubArray ( @_ ) { local $" = q{, }; print qq{[ @$raSubArray ]\n}; } print q{=} x 25, qq{\n}; }