При использовании модификатора foreach его выражение вычисляется в списковом контексте, а это означает,
что все используемые в нем переменные ведут себя так, как они должны вести в списковом контексте.
Например, хэш-массив представляет обычный список, составленный из последовательности его пар ключ/значение,
поэтому следующий фрагмент кода:
%hash = ( Building => 6, street => "Royal", city => "Z" );
print "$_ " foreach %hash;
напечатает строку:
city Z building 6 street Royal
Относительно модификатора foreach (это же, кстати, относится и к эквивалентному ему составному
оператору foreach) следует запомнить одну важную вещь: используемая в них переменная $_ является не
просто переменной, в которой хранится значение элемента списка текущей итерации, она является синонимом
имени этого элемента. Это означает, что любое изменение значения переменной $_ в выражении простого
оператора приводит к изменению значения текущего элемента списка в цикле. Данное обстоятельство можно
использовать для изменения значений элементов списка. Листинг 5.4 демонстрирует применение подобной
техники для извлечения квадратного корня из каждого элемента массива скаляров.
Листинг 5.4. Изменение значений элементов списка
use warnings;
@array = (2.5, 2, 7.8);
$_ = sqrt $_ foreach @array; # Извлечение квадратного корня
# из каждого элемента массива
# @аrrау и сохранение в этом
# же массиве @аrrау.