web-dev-qa-db-ja.com

なに! (二重感嘆符)はどういう意味ですか?

以下のコードでは、 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;

    ...
}

[〜#〜]更新[〜#〜]
すべての回答に感謝します。

これが私が見つけた他の関連するものです リストスカッシュ演算子x!!

34

隣同士に座っているのは、2つの!ブール値ではありません。

このイディオムを使用する理由は、1または0を確実に受け取るためです。実際には、0に数値化する空の文字列を返します。ただし、通常は数値またはブール値のコンテキストでのみ使用されます。

これは、 コードゴルフ 競技会でよく見られます。これは、? :および1で3値の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
48
Brad Gilbert

ない-ない。

値をブール値に変換します(またはPerlがそのようなものに近づく限り)。

12
Quentin

他の3つの回答では、範囲が「0」または「1」であると主張しているため、Perlのブール値(==notなどの演算子によって返される)について言及したいと思いました。 )はundef1であり、01ではありません。

0
jrockway