Это вопрос такого рода, который указывает, что вы действительно должны читать книгу, и, возможно, остальные теги perl faqs .
Тем не менее, $_
- это контекстная переменная, которая неявно создается некоторыми конструкциями и неявно используется некоторыми встроенными функциями.Вот несколько примеров:
while(<>) {
next if /^#/;
last if /^q(?:uit)?$/;
say "Howdy!" if /^hello$/;
}
Это делает большую работу по установке и проверке переменной $_
и эквивалентно:
while(defined($_ = <>)) {
next if $_ =~ /^#/;
last if $_ =~ /^q(?:uit)?$/;
say "Howdy!" if $_ =~ /^hello$/;
}
Другие конструкции, которые устанавливают $_
:: foreach
циклы, given
блоки, map
и grep
операции и catch
блоки в Try :: Tiny .
Другие конструкции, использующие $_
это: голые операторы print;
, оператор подстановки s///
и оператор транслитерации tr///
.
Я бы посоветовал: пока вы изучаете Perl, не используйте неявно $_
.Запишите все полностью (как во втором примере выше), чтобы закрепить в уме то, что на самом деле происходит.Точно так же, как когда вы изучаете иностранный язык, вы должны научиться говорить правильно и осторожно, прежде чем вы начнете понимать язык.$_
полезен для написания более короткого и лаконичного кода и может быть на самом деле более понятным, если сосредоточиться на продолжающейся обработке, а не на переменных, для которых она выполняется, но только после того, как вы узнаете в качестве второй природы, какие операции используют $_
,В противном случае это просто запутанный беспорядок.
Как уже упоминалось, @_
- это список аргументов для подпрограммы.