我对Perl很陌生,在工作中看到了这段代码,我搜索了一段时间但没有找到答案。有人能用简单的英语解释一下它的功能吗?谢谢。
my $abc = delete $args{ 'abc' } // croak 'some information!';
我对Perl很陌生,在工作中看到了这段代码,我搜索了一段时间但没有找到答案。有人能用简单的英语解释一下它的功能吗?谢谢。
my $abc = delete $args{ 'abc' } // croak 'some information!';
//
运算符与 C 语言的 or
运算符有关。事实上,它与 ||
运算符完全相同,只不过它测试左边表达式的定义状态而非其真值。因此,如果EXPR1
被定义,则返回 EXPR1
的值;否则,返回 EXPR2
的值。(EXPR1
在标量上下文中计算,EXPR2
在//
本身的上下文中计算)通常情况下,这与条件操作符形式的defined(EXPR1) ? EXPR1 : EXPR2
结果相同(但是条件操作符形式可以用作左值,而EXPR1 // EXPR2
不能,并且异或运算符形式只计算一次EXPR1
)。这对于为变量提供默认值非常有用。如果你想要测试至少一个$a
和$b
是否被定义,请使用defined($a // $b)
。在perlop中查找Logical Defined-Or,它类似于||
,但它检查undef
值(而非false)。
虽然C语言没有直接相当于的运算符,但Perl的//运算符与其C风格的or有关。实际上,它与||完全相同,只是它测试左手边的定义而不是真值。
因此简而言之,
my $abc = delete $args{ 'abc' } // croak 'some information!';
当$args{'abc'}
返回undef
值时,程序会抛出异常。