my $COLMAXITEM = 3; my $idx = 0; my @rows = (); my $maxcount = scalar @item - 1; foreach my $it (@item) { push @cols, {IMAGESRC=> $it}; if(scalar @cols == $COLMAXITEM or $idx+1 == $maxcount) { push @rows, {COLS => [@cols]}; @cols = (); } $idx++; }