我的 $_ 吗?如果隐含 $_ 则执行任何操作
我认为答案是肯定的,但我只是想确定一下。那么,如果我有
sub something {
my $_;
my @array = ...;
while ( @array ) {
say;
}
}
my $_;
实际上可以有效地词汇化传递给 say 的参数吗?
在这种特殊情况下,我使用 DZP::UnusedVarsTests 并抱怨我没有使用 my $_;
并且我怀疑这是一个错误,因为我在隐含的情况下使用它。
I think the answer is yes but I just want to make sure. so if I have
sub something {
my $_;
my @array = ...;
while ( @array ) {
say;
}
}
is the my $_;
actually effective at lexicalizing the parameter passed to the say?
In this particular case I'm using the DZP::UnusedVarsTests and it's complaining that I haven't used my $_;
and I suspect it's a bug since I'm using it in a case where it's implied.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
简短的回答是肯定的。它使该作用域中的函数使用词法作用域
$_
,而不是全局$_
。如果他们写回$_
,就像s///
的情况一样,您将获得一定程度的损害控制。根据
perldoc perldelta
(5.10.0) :perldoc perl591delta
它接着说:示例
我想提供一些示例来说明为什么要使用此功能:
并且,另一个示例
The short answer is Yes. It makes the functions in that scope use the lexically scoped
$_
, and not the global$_
. If they write back to$_
, as in the case ofs///
, you will have some level of damage control.Per
perldoc perldelta
(5.10.0):And, in
perldoc perl591delta
it goes on to say:Examples
I wanted to provide some examples of why this functionality would be used:
And, another example