То, что описано в этой заметке, вполне можно было бы записать в список каверзных задач на собеседовании.
Простой код, который подсчитывает четные числа в заданном списке.
use v5.10;
my @array = (1..20);
my $count = 0;
for(@array) {
when(/[02468]$/) {$count++}
say $_; # либо просто say;
}
say $count;
Вопрос: что будет напечатано на экране?
С последней строкой все понятно — она напечатает счетчик $count, и в нем содержится правильный ответ 10. Но вот say $_ внутри цикла напечатает лишь все нечетные числа от 1 по 19.
Блок кода, выполняемый функцией when(), содержит неявный оператор next, который не дает возможности продолжить выполнять тело цикла после первого удачного сопоставления. (Об этом сказано в документации.)
Продолжить цикл возможно стандартным образом, дописав continue:
for(@array) {
when(/[02468]$/) {$count++; continue;}
say $_;
}
В качестве дополнительного задания можно спросить, а что изменится, если в условии вместо регулярного выражения записать when($_ % 2).
А затем так: when(!($_ % 2)).
Комментировать