Поскольку я много использую $ _, я хочу лучше понять его использование. $ _ - это глобальная переменная для неявных значений, насколько я понял и использовал ее.
Поскольку $ _, похоже, в любом случае задан, есть ли причины использовать именованные переменные цикла над $ _ помимо readability?
В каких случаях значение $ _ является глобальной переменной?
Так что, если я использую
for (@array){
print $_;
}
или даже
print $_ for @array;
имеет тот же эффект, что и
for my $var (@array){
print $var;
}
Но работает ли он так же? Я думаю, что это не совсем так, но каковы реальные различия?
Обновление
Кажется, что $ _ в этом примере даже правильно определено. Это уже не глобально? Я использую 5.12.3.
#!/usr/bin/perl
use strict;
use warnings;
my @array = qw/one two three four/;
my @other_array = qw/1 2 3 4/;
for (@array){
for (@other_array){
print $_;
}
print $_;
}
, который печатает правильно 1234one1234two1234three1234four.
Для глобального $ _ я бы ожидал 1234 4 1234 4 1234 4 1234 4 .. или я что-то упустил очевидно?
Когда $ _ глобален тогда?
Обновление
Хорошо, после прочтения различных ответов и более тщательно, я пришел к выводу:
Помимо читабельности, лучше избегать использования $ _, потому что неявная локализация $ _ должна быть известна и учитывать, иначе можно столкнуться с неожиданным поведением.
Спасибо за разъяснения по этому вопросу.