我是 perl 的新手。谁能解释一下//
perl中运算符的含义。
5 回答
它是定义运算符。表达方式:
A // B
A
如果已定义,将返回,否则B
.
如果未定义信息源,则获取默认值非常有用,例如:
$actualBalance = $balanceFromBank // 0;
或者:
$confirmation = $userInput // "N";
有关更多详细信息,请参阅perlop 页面的相关部分,并制作一个perlop链接以供将来参考,因为 Google 搜索和标点 Perl 代码不能很好地混合 :-)
//
运算符是逻辑定义或。佩洛普说:
尽管它在 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
这就是所谓的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`
那是“定义或”。$abc // "default"
相当于defined($abc) ? $abc : "default"
。这意味着如果左侧//
有一个定义的值,则使用该值,否则使用它的右侧。
是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
。