Perl($ _,@_)中下划线的意义是什么?

我是Perl的新手,而且我是这样使用它们的

$_

 foreach (@list) { print "$_\n"; } 

@_

 sub search { my ($no, @list) = @_; } 

这些下划线variables究竟是如何在Perl中工作的? 有什么其他的构造,他们是有用的?

这是一个问题,表明你真的应该读一本书,也许perl标签的其余部分常见问题 。

不过, $_是一个上下文variables,由某些构造隐式创build,并由某些内置函数隐式使用。 这里有些例子:

 while(<>) { next if /^#/; last if /^q(?:uit)?$/; say "Howdy!" if /^hello$/; } 

这做了很多工作设置和检查$_variables,相当于:

 while(defined($_ = <>)) { next if $_ =~ /^#/; last if $_ =~ /^q(?:uit)?$/; say "Howdy!" if $_ =~ /^hello$/; } 

设置$_其他结构是: foreach循环, given块, mapgrep操作,以及Try :: Tiny中的 catch块。

其他使用$_构造是:裸print; 语句, s///replace运算符和tr///音译运算符。

我build议:在学习Perl的时候,不要隐式地使用$_ 。 全部写出来(如上面的第二个例子),在你的脑海中强化实际上正在发生的事情。 就像你在学习外语时一样,在学会放弃语言之前,你应该学会正确和谨慎地讲话。 $_对于编写更短,更精确的代码是有用的,并且可以通过关注正在进行的处理而不是正在执行的variables来更清楚地理解,但是只有在您已经学习了第二种性质的操作之后, $_才会更清楚。 否则,这只是一个混乱的混乱。

如其他地方所提到的,@ @_是子例程的参数列表。

这些是Perl中的特殊variables。 参考Perl – 特殊variables