Чтобы получить несколько элементов списка за одну итерацию, используйте что-то вроде List :: MoreUtils :: natatime или используйте splice:
my @tmparray = @array; # don't trash original array
while ( my ($a,$b,$c) = splice(@tmparray,0,3) ) {
print "$a , $b , $c\n";
}
Или реорганизуйте свои данные в несколько массивов и используйте один из алгоритмов :: Loops:: MapCar * функции для циклического перебора нескольких массивов одновременно.