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( $ps, @array ) = @_; my @newArray = map { [ exists $array[ $ps * $_ + $ps - 1 ] ? @array[ ( $ps * $_ ).. ( $ps * $_ + $ps - 1 ) ] : @array[ ( $ps * $_ ) .. $#array] ] } 0 .. $#array / $ps; } sub printAoA { foreach my $raSubArray ( @_ ) { local $" = q{, }; print qq{[ @$raSubArray ]\n}; } print q{=} x 25, qq{\n}; } #### ========================= Partition size = 1 [ 01 ] [ 02 ] [ 03 ] [ 04 ] [ 05 ] [ 06 ] [ 07 ] [ 08 ] [ 09 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] ========================= Partition size = 2 [ 01, 02 ] [ 03, 04 ] [ 05, 06 ] [ 07, 08 ] [ 09, 10 ] [ 11, 12 ] [ 13, 14 ] [ 15, 16 ] [ 17 ] ========================= Partition size = 3 [ 01, 02, 03 ] [ 04, 05, 06 ] [ 07, 08, 09 ] [ 10, 11, 12 ] [ 13, 14, 15 ] [ 16, 17 ] ========================= Partition size = 4 [ 01, 02, 03, 04 ] [ 05, 06, 07, 08 ] [ 09, 10, 11, 12 ] [ 13, 14, 15, 16 ] [ 17 ] ========================= Partition size = 5 [ 01, 02, 03, 04, 05 ] [ 06, 07, 08, 09, 10 ] [ 11, 12, 13, 14, 15 ] [ 16, 17 ] ========================= Partition size = 6 [ 01, 02, 03, 04, 05, 06 ] [ 07, 08, 09, 10, 11, 12 ] [ 13, 14, 15, 16, 17 ] ========================= Partition size = 7 [ 01, 02, 03, 04, 05, 06, 07 ] [ 08, 09, 10, 11, 12, 13, 14 ] [ 15, 16, 17 ] ========================= Partition size = 8 [ 01, 02, 03, 04, 05, 06, 07, 08 ] [ 09, 10, 11, 12, 13, 14, 15, 16 ] [ 17 ] ========================= Partition size = 9 [ 01, 02, 03, 04, 05, 06, 07, 08, 09 ] [ 10, 11, 12, 13, 14, 15, 16, 17 ] ========================= Partition size = 10 [ 01, 02, 03, 04, 05, 06, 07, 08, 09, 10 ] [ 11, 12, 13, 14, 15, 16, 17 ] ========================= #### 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}; }