在下面的代码中,从blog post by Alias开始,我注意到使用双感叹号!!
。我想知道这意味着什么以及我将来可以在哪里找到像这样的Perl语法的解释。 (是的,我已经在perlsyn)搜索了!!
。
package Foo;
use vars qw{$DEBUG};
BEGIN {
$DEBUG = 0 unless defined $DEBUG;
}
use constant DEBUG => !! $DEBUG;
sub foo {
debug('In sub foo') if DEBUG;
...
}
更新
感谢您的所有答案。
以下是我刚发现的与The List Squash Operator x!!
答案 0 :(得分:48)
只有两个!
布尔非运算符彼此相邻。
使用此习语的原因是为了确保您收到1
或0
。实际上它返回一个空字符串,其数字为0.它通常只用于数字或布尔上下文。
您经常会在Code Golf比赛中看到这一点,因为它比使用? :
和1
(0
$test ? 1 : 0
三元!! undef == 0
!! 0 == 0
!! 1 == 1
!! $obj == 1
!! 100 == 1
undef ? 1 : 0 == 0
0 ? 1 : 0 == 0
1 ? 1 : 0 == 1
$obj ? 1 : 0 == 1
100 ? 1 : 0 == 1
运算符更短})子>
{{1}}
答案 1 :(得分:12)
未不
它将值转换为布尔值(或者像Perl一样接近这样的东西)。
答案 2 :(得分:-1)
因为其他三个答案声称范围是“0”或“1”,我只是想我会在Perl中提到布尔值(由==
,not
等运算符返回,依此类推)是undef
和1
,而不是0
和1
。