$ perl -MData::Dumper -le '$bucket={}; @a=(1..12); $max=scalar @a/4; for my $x(1..4) { for my $y(0..$max-1){ push @{$bucket->{$x}},shift(@a); } } print Dumper $bucket' $VAR1 = { '4' => [ 10, 11, 12 ], '1' => [ 1, 2, 3 ], '3' => [ 7, 8, 9 ], '2' => [ 4, 5, 6 ] }; $ perl -MData::Dumper -le '$how_many=4; $bucket={}; $count=1;for (1..12) { push @{$bucket->{$count++}},$_; $count=1 if $_%$how_many == 0; }; print Dumper $bucket' $VAR1 = { '2' => [ 2, 6, 10 ], '3' => [ 3, 7, 11 ], '4' => [ 4, 8, 12 ], '1' => [ 1, 5, 9 ] };