什么! (双重感叹号)是什么意思?
在下面的代码中,从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;
...
}
UPDATE
感谢您的所有答案。
这里还有一些其他的东西,我只是发现这是相关的列表壁球运算符x!!
这只是两个!
布尔不是坐在一起的操作符。
使用这个习语的原因是为了确保你收到1
或0
。 实际上,它返回一个空字符串,其numifys为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
不是这样的。
它将该值转换为布尔值(或者与Perl得到这样的结果一样接近)。
因为其他三个答案都声称范围是“0”或“1”,所以我想我会提到Perl中的布尔值(由像==
这样的运算符返回, not
等等)是undef
和1
,而不是0
和1
。