В первой части были приведены три программы, работающие под Perl 5.12, и предлагалось определить, что они выведут.
А выведут они следующее.
Программа А.
use v5.12;
my @letters = 'a'..'z';
for (my ($number, $char) = each @letters) {
say "$number $char";
}
0 a
0 a
Программа Б.
use v5.12;
my @letters = 'a'..'z';
say $_ for each @letters;
0
a
Программа В.
use v5.12;
my @letters = 'a'..'z';
say $_ foreach @letters;
a
b
c
. . .
x
y
z
Мда, чего объяснять-то?
1. для for вычисляется список my ($number, $char) = each @letters,
т.е. перебирается список из 2 элементов (индекс первого элемента + его значение). Сначала в for $_ равно 0, потом 'a', но так как для вывода используются переменные назначенные при инициализации всё выводится как мы видим.
2. Во втором примере выводится $_, собственно процесс я описал выше
3. В третьем случае each не используется, а foreach - равносильно for, поэтому выводятся элементы массива @letters
Когда я первую часть увидел сначала на 1й пример неправильный дал ответ, но прочитав второй сам же и исправился.
P.S. в примерах можно ещё "отгольфить", $_ убрать и всё такое
Спасибо за указание интересных моментов each для массивов!