什么!! (双感叹号)是什么意思?

时间:2010-01-30 15:46:22

标签: perl operators boolean negation

在下面的代码中,从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!!

相关的其他内容

3 个答案:

答案 0 :(得分:48)

只有两个!布尔非运算符彼此相邻。

使用此习语的原因是为了确保您收到10。实际上它返回一个空字符串,其数字为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等运算符返回,依此类推)是undef1,而不是01