我见过这样的perl语句:
() unless $some_var;
那打算实现什么目标?
答案 0 :(得分:9)
这里有几件事情,但最重要的是这种线通常会显示为已执行块的最后一行[1]。在该上下文中,块的值是最后执行的语句的值[2]。现在,如果右侧为真,则包含unless
的语句具有左侧的值,否则具有右侧的值,因此这是一种说“块的值”的方式如果$some_var
恰好是$some_var
,则为()
,否则为()
。
$some_var
仅仅是空列表,因此此代码为$some_var
为false的情况提供空列表的默认值(可能是因为or
未定义。)
与$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
为false,而5
是包含5
的数组,因为() unless $some_var;
为真。
除了作为块的最后一个语句之外的任何地方,once
都是无操作。如果没有另外提及$some_var
,它会抑制eval
警告。
[1]:这是一个由do
或map
评估或提供给(例如)grep
或{{1}}的块,或称为子例程的块。
[2]:“最后执行的语句的值”是一个奇怪的短语;大多数只有表达式才有值。但是因为Perl包含的概念是,在没有显式返回的情况下,块的值是最后一个语句的值,Perl需要这个奇怪的短语。
答案 1 :(得分:3)
神秘解决了:
GetOptions(
"-interactive",
"-request_file=s",
) or usage();
usage unless ($opt_request_file);
() unless ($opt_interactive);
好像是'();'是误导 - 它没有做任何事情,目的只是提到$ opt_interactive变量一次......作为一种方法来抑制perl警告'Name'$ var“只使用一次'。
感谢所有试图解决问题的人!
答案 2 :(得分:1)
它可能用于隐式返回,如果$some_var
求值为true,则返回它,否则返回空列表。
答案 3 :(得分:1)
就其本身而言,这个表达是一个nop。但是,如果没有显式的return语句,则该值(空列表)可以自动从子例程或do()块返回,并且该值恰好是块中的最后一个。
答案 4 :(得分:0)
if 执行一次语句。
unless
相反,它执行语句,除非条件为真(即条件为假)。
查看更多详情:http://perldoc.perl.org/perlsyn.html
()只是空列表,因此这段代码为$ some_var为false的情况提供了空列表的默认值(可能是因为$ some_var未定义)。
答案 5 :(得分:0)
如果$ some_var为false,则返回空列表。
如果我写
@s = () unless $some_var;
,如果@s
为假,我会清空$some_var
。
这是我能想到的唯一方法。