Chr*_*oms 34 perl boolean operators negation
在下面的代码中,从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;
    ...
}
更新
 
感谢您的所有答案.
以下是我刚发现的与List Squash Operator相关的其他内容x!!
Bra*_*ert 48
它只是两个!布尔运算符而不是彼此相邻的运算符.
使用这个成语的原因是为了确保你收到一个1或一个0.实际上它返回一个空字符串,其数字为0.它通常只用于数字或布尔上下文.
您经常会在Code Golf比赛中看到这一点,因为它比使用和()使用三元? :运算符更短.10 $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