当我经常使用 $_ 时,我想更好地了解它的用法。据我了解和使用,$_ 是隐式值的全局变量。
由于 $_ 似乎无论如何都设置了,除了可读性之外,还有理由在 $_ 上使用命名循环变量吗?
在什么情况下 $_ 是一个全局变量很重要?
所以如果我使用
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 .. 还是我错过了一些明显的东西?
那么 $_ 什么时候是全局的呢?
更新:
好的,在更仔细地阅读了各种答案和 perlsyn 之后,我得出了一个结论:
除了可读性之外,最好避免使用 $_ 因为必须知道并考虑 $_ 的隐式本地化,否则可能会遇到意外行为。
感谢您澄清此事。