サーチ…


構文

  • undef#False
  • ''#定義済み、偽
  • 0#定義済み、長さ付き、False
  • '0'#定義済み、長さ、偽

備考

Perlにはブール型のデータ型がありませんし、他の多くの言語とtruefalseキーワードはありません。ただし、ブール値のコンテキスト(if文やwhileループの条件など)で評価すると、すべてのスカラー値はtrueまたはfalseと評価されます。

次の値はfalseとみなされます。

  • '' 、空文字列。これは組み込みの比較演算子が返すものです(例えば0 == 1
  • 0あなたは000または0.0としてそれを書く場合でも、番号0、
  • '0' 、単一の0桁を含む文字列
  • undef 、未定義の値
  • オーバーロードを使用してJSON::falseなどの不正な値に数値化/文字列化するオブジェクト

それ以外の値はすべてtrueです。

  • などの任意の非ゼロ数13.14'NaN'または'Inf'
  • 数値的に0ではなく、文字通りの文字列である任意の文字列'0'のような、 '00''0e0'"0\n""abc"
    意図的に真の数値的に0の値を返す場合は、 '0E0' (良く知られているモジュールで使われます)や'0 but true' (Perlの関数で使われます)
  • ' ''false'ように空でない他の文字列は、
  • \''[]{}などの偽の値を参照する場合でも、すべての参照は、
  • false値の配列またはハッシュ

以下の演算子は、一般的に、スカラーコンテキストでブール値を返すように扱われます:

  • @aは配列が空であるかどうかを返します

  • %hは、ハッシュが空であるかどうかを返します。

  • grepは一致する項目が見つかったかどうかを返します

  • @a = LIST(LIST) = LISTは、右側のLISTがスカラを生成したかどうかを返します。

真偽値のリスト

use feature qw( say );

# Numbers are true if they're not equal to 0.
say 0             ? 'true' : 'false'; # false
say 1             ? 'true' : 'false'; # true
say 2             ? 'true' : 'false'; # true
say -1            ? 'true' : 'false'; # true
say 1-1           ? 'true' : 'false'; # false
say 0e7           ? 'true' : 'false'; # false
say -0.00         ? 'true' : 'false'; # false

# Strings are true if they're not empty.
say 'a'           ? 'true' : 'false'; # true
say 'false'       ? 'true' : 'false'; # true
say ''            ? 'true' : 'false'; # false

# Even if a string would be treated as 0 in numeric context, it's true if nonempty.
# The only exception is the string "0", which is false.
# To force numeric context add 0 to the string
say '0'           ? 'true' : 'false'; # false
say '0.0'         ? 'true' : 'false'; # true
say '0e0'         ? 'true' : 'false'; # true
say '0 but true'  ? 'true' : 'false'; # true
say '0 whargarbl' ? 'true' : 'false'; # true
say 0+'0 argarbl' ? 'true' : 'false'; # false

# Things that become numbers in scalar context are treated as numbers.
my @c = ();
my @d = (0);
say @c            ? 'true' : 'false'; # false
say @d            ? 'true' : 'false'; # true

# Anything undefined is false.
say undef         ? 'true' : 'false'; # false

# References are always true, even if they point at something false
my @c = ();
my $d = 0;
say \@c            ? 'true' : 'false'; # true
say \$d            ? 'true' : 'false'; # true
say \0             ? 'true' : 'false'; # true
say \''            ? 'true' : 'false'; # true


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow