这句话是做什么的:();

时间:2010-08-25 06:49:18

标签: perl

我见过这样的perl语句:

() unless $some_var;

那打算实现什么目标?

6 个答案:

答案 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]:这是一个由domap评估或提供给(例如)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

这是我能想到的唯一方法。