0

我是 perl 的新手。谁能解释一下//perl中运算符的含义。

4

5 回答 5

10

它是定义运算符。表达方式:

A // B

A如果已定义,将返回,否则B.

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

$actualBalance = $balanceFromBank // 0;

或者:

$confirmation = $userInput // "N";

有关更多详细信息,请参阅perlop 页面的相关部分,并制作一个perlop链接以供将来参考,因为 Google 搜索和标点 Perl 代码不能很好地混合 :-)

于 2012-10-16T09:20:12.980 回答
9

//运算符是逻辑定义或佩洛普说:

尽管它在 C 中没有直接的等价物,但 Perl 的 // 运算符与其 C 风格的 or 相关。实际上,它与 || 完全相同,只是它测试的是左侧的定义性而不是其真实性。因此,EXPR1 // 如果 EXPR2 已定义,则返回 EXPR1 的值,否则返回 EXPR2 的值。(EXPR1 在标量上下文中求值,EXPR2 在 // 自身的上下文中求值)。通常,这与 defined(EXPR1) 的结果相同?EXPR1 : EXPR2 (除了三元运算符形式可以用作左值,而 EXPR1 // EXPR2 不能)。这对于为变量提供默认值非常有用。如果您真的想测试是否至少定义了 $a 和 $b 之一,请使用 defined($a // $b) 。

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

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

my $bar = 'bar';
say $bar // 42;
# bar
于 2012-10-16T09:21:42.427 回答
2

这就是所谓的defined-or运算符,它已在Perl 5.10中实现。文档中的示例:

以下表达式:

$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`
于 2012-10-16T09:23:07.573 回答
1

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

请参阅perlop 手册页中的“逻辑定义或”

于 2012-10-16T09:21:09.323 回答
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

于 2012-10-16T09:20:50.180 回答