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
块, map
和grep
操作,以及Try :: Tiny中的 catch
块。
其他使用$_
构造是:裸print;
语句, s///
replace运算符和tr///
音译运算符。
我build议:在学习Perl的时候,不要隐式地使用$_
。 全部写出来(如上面的第二个例子),在你的脑海中强化实际上正在发生的事情。 就像你在学习外语时一样,在学会放弃语言之前,你应该学会正确和谨慎地讲话。 $_
对于编写更短,更精确的代码是有用的,并且可以通过关注正在进行的处理而不是正在执行的variables来更清楚地理解,但是只有在您已经学习了第二种性质的操作之后, $_
才会更清楚。 否则,这只是一个混乱的混乱。
如其他地方所提到的,@ @_
是子例程的参数列表。
这些是Perl中的特殊variables。 参考Perl – 特殊variables 。