perl中//运算符的含义

时间:2012-10-16 09:18:19

标签: perl operators

我是perl的新手。任何人都可以在perl中解释//运算符的含义。

5 个答案:

答案 0 :(得分:10)

这是定义运算符。表达式:

A // B
如果已定义,

将返回A,否则为B

如果未定义信息来源,则获取默认值非常有用,例如:

$actualBalance = $balanceFromBank // 0;

或:

$confirmation = $userInput // "N";

请参阅the relevant part of the perlop page以获取更多详细信息,并建立perlop的链接以供将来参考,因为Google搜索和标点符号Perl代码不能很好地混合: - )

答案 1 :(得分:8)

//运算符是逻辑定义的 - 或Perlop说:

  

虽然它在C中没有直接的等价物,但Perl的//运算符是   与其C风格或。事实上,它与||完全相同,   除了它测试左手边的定义而不是它   真相。因此,EXPR1 // EXPR2返回EXPR1的值(如果是)   定义,否则,返回EXPR2的值。 (EXPR1是   在标量上下文中评估,在//本身的上下文中EXPR2)。   通常,这与定义的结果相同(EXPR1)? EXPR1:EXPR2   (除了三元运算符形式可以用作左值,而   EXPR1 // EXPR2不能)。这对于提供默认值非常有用   变量的值。如果你真的想测试至少一个   $ a和$ b已定义,使用已定义($ a // $ b)。

简而言之:如果定义了表达式(如非undef)或右侧,则返回左侧。

my $foo = undef;
say $foo // 42;
# 42

my $bar = 'bar';
say $bar // 42;
# bar

答案 2 :(得分:2)

它是所谓的defined-or运算符,已在Perl 5.10中实现。 doc:

中的示例
  

以下表达式:

$a // $b
     

......仅仅等同于

defined $a ? $a : $b
     

声明:

$c //= $d;
     

...现在可以用来代替

$c = $d unless defined $c;

以下是||//的不同之处:

use 5.010;
my $rabbits = 0;
say $rabbits || 1; # 1, as 0 || 1 evaluates to 1
say $rabbits // 1; # 0, as 0 is not `undef`

答案 3 :(得分:1)

那是"定义 - 或"。 $abc // "default"相当于defined($abc) ? $abc : "default"。这意味着如果//的左侧有一个定义的值,则使用该值,否则使用该值。

请参阅"Logical defined-or" in the perlop man page

答案 4 :(得分:0)

defined or

喜欢,

my $a //= 3;

会将3分配给$a

||不同,or就是my $a = ""; $a //= 3; print "|$a|\n"; $a = ""; $a ||=5; print "|$a|\n";

|5|

将仅打印$a,因为在第一种情况下$a已定义(具有错误值),而在第二种情况下,true评估为{{1}}时很重要或不。