while (@a) { my @group = splice(@a, 0, 3); ... } #### for my $i (0..@a/3-1) { my @group = @a[$i*3..$i*3+2]; ... } #### for (my $i=0; $i<@a; $i+=3) { my @group = @a[$i..$i+2]; ... } #### use List::MoreUtils qw( natatime ); my $i = natatime(3, @a); while (my @group = $it->()) { ... }