双正斜线在这里意味着什么?

时间:2014-05-26 15:27:36

标签: perl

我是Perl的新手并且在工作中遇到了这段代码,我搜索了一段时间但没有找到答案。任何人都可以用简单的英语解释它的功能吗?感谢。

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

2 个答案:

答案 0 :(得分:32)

从此页面开始:http://perldoc.perl.org/perlop.html#Logical-Defined-Or

  

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

答案 1 :(得分:9)

在perlop中检查Logical Defined-Or,它类似于||,但会检查undef值(不是假值)。

  

虽然它在C中没有直接的等价物,但Perl的//运算符与它的C风格或。事实上,它与||完全相同,只是它测试左手边的定义而不是真实。

简而言之,

my $abc = delete $args{ 'abc' } // croak 'some information!';
$args{ 'abc' }返回undef值时,

会嘶哑。