在下面的代码中,从 别名博客文章, ,我注意到使用双感叹点的使用 !!. 。我想知道这是什么意思,以及将来可以去哪里找到这样的解释。 (是的,我已经搜索了 !!佩尔森).

package Foo;

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

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

    ...
}

更新
感谢您的所有答案。

这是我刚刚发现的其他东西 列表壁球操作员 x!!

有帮助吗?

解决方案

只是两个 ! 布尔值不是坐在彼此旁边的操作员。

使用此习语的原因是确保您收到 1 或a 0. 。实际上,它返回一个空字符串,该字符串通常仅在数字或布尔上下文中使用。

您经常会看到这个 代码高尔夫 比赛,因为它比使用三元 ? : 操作员与 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

其他提示

不是这样的。

它将值转换为布尔值(或与Perl接近这样的东西)。

因为其他三个答案声称该范围是“ 0”或“ 1”,所以我只是想我要提到的是Perl中的布尔人(如运营商返回的 ==, not, ,等等) undef1, , 不是 01.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top