質問

以下のコードでは、aから エイリアスによるブログ投稿, 、二重の感嘆符の使用に気づきました !!. 。私はそれが何を意味するのか、そしてこのような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 またはa 0. 。実際、それは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がそのようなものに到達するのと同じくらい近い)。

他の3つの回答は、範囲が「0」または「1」であると主張しているため、Perlのブーチャンはそのようなオペレーターによって返されるように言及していると思いました ==, not, 、など)です undef1, 、 いいえ 01.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top