【发布时间】:2014-07-15 10:04:01
【问题描述】:
我是 Perl 的新手,在工作中遇到了这段代码,我搜索了一段时间,但没有找到答案。任何人都可以用简单的英语帮助解释它的功能吗?谢谢。
my $abc = delete $args{ 'abc' } // croak 'some information!';
【问题讨论】:
标签: perl
我是 Perl 的新手,在工作中遇到了这段代码,我搜索了一段时间,但没有找到答案。任何人都可以用简单的英语帮助解释它的功能吗?谢谢。
my $abc = delete $args{ 'abc' } // croak 'some information!';
【问题讨论】:
标签: perl
来自此页面:http://perldoc.perl.org/perlop.html#Logical-Defined-Or
虽然它在 C 中没有直接的等价物,但 Perl 的
//运算符与其 C 风格的or有关。实际上,它与||完全相同,只是它测试的是左侧的定义性,而不是其真相。因此,EXPR1 // EXPR2如果已定义,则返回EXPR1的值,否则返回EXPR2的值。 (EXPR1在 scalar 上下文中评估,EXPR2在//本身的上下文中评估)。通常,这与defined(EXPR1) ? EXPR1 : EXPR2的结果相同(除了三元运算符形式可以用作左值,而EXPR1 // EXPR2不能,EXPR1 只会被计算一次)。这对于为变量提供默认值非常有用。如果您真的想测试是否至少定义了$a和$b之一,请使用defined($a // $b)。
【讨论】:
在 perlop 中检查Logical Defined-Or,它类似于||,但它检查undef 值(不是假值)。
虽然它在 C 中没有直接的等价物,但 Perl 的 // 运算符与其 C 风格的或有关。事实上,它与 || 完全一样,只是它测试的是左侧的定义性而不是其真实性。
简而言之,
my $abc = delete $args{ 'abc' } // croak 'some information!';
当$args{ 'abc' } 返回undef 值时会发出嘶嘶声。
【讨论】: