$_
- это «пространство ввода по умолчанию и сопоставление с образцом». Другими словами, если вы читаете из дескриптора файла в верхней части цикла while или запускаете цикл foreach и не называете переменную цикла, $_
настроен для вас.
Однако, если вы пишете цикл foreach и называете переменную цикла, $ _ не устанавливается. Это можно оправдать следующим кодом:
1. #!/usr/bin/perl -w
2. @array = (1,2,3);
3. foreach my $elmnt (@array)
4. {
5. print "$_ ";
6. }
Вывод «Использование неинициализированного значения в конкатенации (.)»
Однако, если вы замените строку 3 на:
foreach (@array)
Выход «1 2 3», как и ожидалось.
Теперь в вашем случае всегда лучше назвать переменную цикла в цикле foreach, чтобы сделать код более читабельным (perl уже проклят за то, что он менее читабелен), таким образом, также не будет необходимости в явном присваивании к переменной $_
и возникающим проблемам с областями видимости.