Your code looks better. Here is one liner. Two ways, filling first bucket first and filling bucket one after another.
$ perl -MData::Dumper -le '$bucket={}; @a=(1..12); $max=scalar @a/4; f
+or 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..1
+2) { 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
]
};