这里的双斜杠是什么意思?

37

我对Perl很陌生,在工作中看到了这段代码,我搜索了一段时间但没有找到答案。有人能用简单的英语解释一下它的功能吗?谢谢。

my $abc = delete $args{ 'abc' } // croak 'some information!';
2个回答

45
从这个页面上:http://perldoc.perl.org/perlop.html#Logical-Defined-Or 尽管 C 语言中没有直接相对应的运算符,但 Perl 的 // 运算符与 C 语言的 or 运算符有关。事实上,它与 || 运算符完全相同,只不过它测试左边表达式的定义状态而非其真值。因此,如果EXPR1被定义,则返回 EXPR1 的值;否则,返回 EXPR2 的值。(EXPR1标量上下文中计算,EXPR2//本身的上下文中计算)通常情况下,这与条件操作符形式的defined(EXPR1) ? EXPR1 : EXPR2结果相同(但是条件操作符形式可以用作左值,而EXPR1 // EXPR2不能,并且异或运算符形式只计算一次EXPR1)。这对于为变量提供默认值非常有用。如果你想要测试至少一个$a$b是否被定义,请使用defined($a // $b)

1
这类似于SQL的COALESCE函数(尽管这里只支持两个操作数)。 - Jesus Alonso Abad

11

在perlop中查找Logical Defined-Or,它类似于||,但它检查undef值(而非false)。

虽然C语言没有直接相当于的运算符,但Perl的//运算符与其C风格的or有关。实际上,它与||完全相同,只是它测试左手边的定义而不是真值。

因此简而言之,

my $abc = delete $args{ 'abc' } // croak 'some information!';

$args{'abc'}返回undef值时,程序会抛出异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接