以下のコードでは、 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!!
隣同士に座っているのは、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
ない-ない。
値をブール値に変換します(またはPerlがそのようなものに近づく限り)。
他の3つの回答では、範囲が「0」または「1」であると主張しているため、Perlのブール値(==
、not
などの演算子によって返される)について言及したいと思いました。 )はundef
と1
であり、0
と1
ではありません。