#!/bin/perl my @array = qw(1 2 3 4 5 6 7 8 9 10 11 12); my $counter = 1; my $data; for my $pos (0 .. $#array) { print $array[$pos],"\n"; push @{$data->{$counter}}, $array[$pos]; if ($counter == 4) { $counter = 1; } else { $counter++; } }; use Data::Dumper; print Dumper($data);