Это может быть сделано неразрушающим, с просто фантастическим Эрика Строма List::Gen
:
perl -MList::Gen=":utility" -E '@nums = "1" .. "6" ;
say "i:$_->[0] j:$_->[1]" for every 2 => @nums'
выход
i:1 j:2
i:3 j:4
i:5 j:6
Редактировать (добавить версию без CPAN):
Массив и стиль C для цикла à la Брайан Д Фой и Том Кристиансен ! Это можно прочитать как «использовать индекс ($i
) для циклического перебора элементов @list
foreach
$n
одновременно»:
use v5.16; # for strict, warnings, say
my @list = "1" .. "6";
my $n = 2 ; # the number to loop by
$n-- ; # subtract 1 because of zero index
foreach (my $i = 0 ; $i < @list ; $i += $n ) {
say "i:", [ @list[$i..$i+$n] ]->[0], " j:", [ @list[$i..$i+$n] ]->[1];
$i++ ;
}
Мы получаем доступ к элементам (->[0]
) анонимного массива ([ ]
). Для более обобщенного вывода срез интерполированного массива может использоваться сам по себе, , например, : print "@list[$i..$i+$n]";
, изменяя значение $n
, как требуется.