Управляющая конструкция foreach

Последовательная обработка всех элементов массива или списка – весьма стандартная задача; специально для ее решения в Perl определена управляющая конструкция foreach. Цикл foreach перебирает список значений и выполняет одну итерацию (проход тела цикла) для каждого элемента списка:

foreach $rock (qw/ bedrock slate lava /) {
print "One rock is $rock.\n"; # Выводит три слова
}

Управляющая переменная ($rock в данном примере) при каждой итерации получает очередное значение из списка. При первой итерации она равна "bedrock", а при третьей – "lava". Управляющая переменная не является копией элемента списка – это сам элемент списка. Иначе говоря, при модификации управляющей переменной внутри цикла изменяется текущий элемент, как показывает следующий фрагмент. Это довольно удобно, но тем, кто об этом не знает, данная возможность может преподнести сюрприз:

@rocks = qw/ bedrock slate lava /;
foreach $rock (@rocks) {
$rock = "\t$rock"; # Поставить символ табуляции перед каждым
# элементом @rocks
$rock .= "\n"; # После каждого элемента ставится символ
# новой строки
}
print "The rocks are:\n", @rocks; # Элементы выводятся с отступами
# и в разных строках

Какое значение будет иметь управляющая переменная после завершения цикла? То же, которое она имела до его начала.


Perl автоматически сохраняет и восстанавливает значение управляющей переменной цикла foreach. Во время выполнения цикла невозможно обратиться к этому сохраненному значению или изменить его. Таким образом, после завершения цикла переменная обладает тем же значением, что и до начала цикла, или undef, если ей не было присвоено значение. Получается, что вы можете назвать управляющую переменную цикла $rock, не беспокоясь о том, что это имя уже могло быть использовано для другой переменной.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
в списочном контексте
Главная служебная переменная: $_
Интерполяция массивов в строках
Использование выражений, создающих скаляры, в списочном контексте
Использование выражений, создающих списки, в скалярном контексте

Вернуться в раздел: Perl / 2. Списки и массивы