我正在重构我继承的 Perl 程序。以下行
(! exists $self->{DEVEL}) && { @$d = $nsaobj->filter_list(@$d) };
抛出以下警告...
Useless use of anonymous hash ({}) in void context...
首先我想了解这里发生了什么。我是否正确,这只是下面陈述的另一种书写方式?
if (! exists $self->{DEVEL}) {
@$d = $nsaobj->filter_list(@$d);
}
我最好的猜测是,原来的行是由于惰性求值而起作用的,如果是这样,那么这样写的合理性是什么?
其次,为什么这一行会抛出“无用的使用..”警告?
首先我想了解这里发生了什么。我是否正确,这只是下面陈述的另一种书写方式?
是的,这似乎是原始代码的意图,但这并不完全是它正在做的事情。 Perl 的警告是正确的。原作者可能想写
(! exists $self->{DEVEL}) && do { @$d = $nsaobj->filter_list(@$d); };
The do
是这里的重要部分,因为它声明执行后续块。如果没有do
,Perl 相反创建一个匿名哈希引用,其内容为@$d
但该值不会绑定到任何变量,因此会出现警告。如果出现以下情况,甚至可能会导致运行时错误:@$d
最终成为一个具有奇数个元素的数组。
如果希望将其保留为一句台词,这将是一种更典型的构造
@$d = $nsaobj->filter_list(@$d) unless exists $self->{DEVEL};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)