for и when

| Нет комментариев

То, что описано в этой заметке, вполне можно было бы записать в список каверзных задач на собеседовании.

Простой код, который подсчитывает четные числа в заданном списке.

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)).

Комментировать

Страницы

  • img

Об этой записи

Сообщение опубликовано 17.02.2010 00:07. Автор — ash.

Предыдущая запись — Расписание выступлений на Perlburg-е

Следующая запись — Perl Mova + YAPC::Russia 2010

Смотрите новые записи на главной странице или загляните в архив, где есть ссылки на все сообщения.