关于perl:!!什么意思

What does !! (double exclamation point) mean?

在下面的代码中,从一篇别名为的博客文章中,我注意到了双感叹号!!的用法。我想知道这意味着什么,将来我可以到哪里去寻找这种Perl语法的解释。(是的,我已经在Perlsyn上搜索了!!)。

1
2
3
4
5
6
7
8
9
10
11
12
13
package Foo;

use vars qw{$DEBUG};
BEGIN {
    $DEBUG = 0 unless defined $DEBUG;
}
use constant DEBUG => !! $DEBUG;

sub foo {
    debug('In sub foo') if DEBUG;

    ...
}

更新谢谢你的回答。

这是我刚发现的与壁球操作员名单有关的其他东西。


它只是两个!布尔值,而不是相邻的运算符。

使用这个习语的原因是为了确保您收到一个10。实际上,它返回一个空字符串,数值为0。不过,它通常只在数字或布尔上下文中使用。

你会经常在代码高尔夫比赛中看到这一点,因为它比使用三元? :operator with 1and 0($test ? 1 : 0).

1
2
3
4
5
6
7
8
9
10
11
!! 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等运算符返回)是undef1,而不是01