Инициализация переменных

В примерах из двух предыдущих заметок оператор for принимал параметры, смысл которых был очевиден: есть некоторый набор констант, и из него последовательно выбираются отдельные значения, причем набор не обязан быть последовательностью целых чисел (об этом — позже).

Однако что произойдет, если и до, и после разделителя -> упомянуть одну и ту же переменную? Будет ли изменяться верхняя граница переменной цикла в этом примере?

Ответ «123» говорит о том, что последовательность инициализации переменных в цикле такова: вначале вычисляется начальное значение интервала слева от ->, затем устанавливаются переменные цикла, после чего вычисляется верхняя граница интервала. Когда список значений определен, он остается неизменным на протяжении всего цикла: несмотря на то, что переменная $c изменяется, цикл останавливается после трех итераций.

Менее очевидна последовательность инициализации в том случае, если переменных в цикле несколько или переменные цикла определяют нижнюю границу. Однако, оператор for в Perl 6 работает предсказуемо. Например, в следующей программе список значений, которые примут переменные цикла, состоит их четырех элементов (undef, 1, 2, 3).

for $x..3 -> $x, $y{
print ‘undef’ unless defined $x;
print «$x $y\n»;
}
for 1 .. 3 * $c -> $c {
print $c;
}