我是Perl的新手并且在工作中遇到了这段代码,我搜索了一段时间但没有找到答案。任何人都可以用简单的英语解释它的功能吗?感谢。
my $abc = delete $args{ 'abc' } // croak 'some information!';
答案 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
值时,会嘶哑。