Perl Language
真と偽
サーチ…
構文
- undef#False
- ''#定義済み、偽
- 0#定義済み、長さ付き、False
- '0'#定義済み、長さ、偽
備考
Perlにはブール型のデータ型がありませんし、他の多くの言語とtrue
とfalse
キーワードはありません。ただし、ブール値のコンテキスト(if文やwhileループの条件など)で評価すると、すべてのスカラー値はtrueまたはfalseと評価されます。
次の値はfalseとみなされます。
-
''
、空文字列。これは組み込みの比較演算子が返すものです(例えば0 == 1
) -
0
あなたは000または0.0としてそれを書く場合でも、番号0、 -
'0'
、単一の0桁を含む文字列 -
undef
、未定義の値 - オーバーロードを使用して
JSON::false
などの不正な値に数値化/文字列化するオブジェクト
それ以外の値はすべてtrueです。
- などの任意の非ゼロ数
1
、3.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