我见过perl语句看起来像这样:
() unless $some_var;
那打算实现什么目标?
解决方法
这里有几件事情,但最重要的是这种线通常会显示为执行块的最后一行[1].在该上下文中,块的值是最后执行的语句的值[2].现在一个语句包含除非右侧的值为左侧的值,否则为右侧的值,所以这是一种说法“块的值是$some_var if $some_var恰好是真的,()否则“.
()仅仅是空列表,因此这段代码为$some_var为false的情况提供了空列表的默认值(可能是因为$some_var未定义.)
更常见的是与等同物一样实现相同的效果
$some_var or ();
放在一起,我们可以看到这些情况:
use strict; use warnings; my @x = do { () unless 0 }; my @y = do { () unless 5 }; print "\@x: <@x>\n\@y: <@y>\n";
@x是空数组,因为0是假,而@y是一个包含5的数组,因为5为真.
除了作为块的最后一个语句之外的任何地方,()除非$some_var;是一个无操作.如果没有另外提到$some_var,它确实会抑制一次警告.
[1]:这是一个由eval评估的块,或者提供或提供给(例如)map或grep,或称为子例程的块.
[2]:“最后执行的语句的值”是一个奇怪的短语;大多数只有表达式才有值.但是因为Perl包含的概念是,在没有显式返回的情况下,块的值是最后一个语句的值,Perl需要这个奇怪的短语.