Perlテックブログ

Perlゼミのはてな出張所。Perlの新着情報、Perlイベントなどの紹介

Perlには、真偽値型も、真偽値リテラルも、存在しません。

Perlの真偽値に反応して書き書き。

Perlには、真偽値型はない

Perlは、動的型言語ですから、もちろん、真偽値型というものは、ありません。

内部的にはSVデータ型として、データを保存していますが、これも、真偽値型という概念を持っていません。

Perlには、真偽値リテラルはない

Perlには、trueやfalseといった真偽値リテラルはありません。

Perlでは、一般的には、真は1で、偽は、0かundefで表現することが多いですね。


# 偽(デフォルトundef)
my $flag;

# 0を入れる
my $flag = 0;

# 真は1が多い
my $flag = 1;

普段は困らない

これで、プログラミング上は、普段は、何も困ることはないです。

唯一必要なのは、JSONブーリアンを入力するとき

プログラミングの内部で閉じている場合は、何の不便もありませんが、JSONブーリアンを入力するときに、Perlにおいては対応がないので、ひと工夫が必要です。

ただし、Perlには、演算子オーバーロードという機能があるので、JSONを解析した結果は、オブジェクトで表現された真偽値に変換され、そのまま真偽値として利用できます。


my $data = decode_json($json);

# そのままでOK
if ($data->{flag}) {

}
else {

}

JSON出力に関しては、1,0で出力してあげれば、真偽値として、利用できますね! (仕様で求められる場合は、別ですが)

結論: そんなにびっくりしなくてもよい

まぁ、まぁ、落ち着いて。

実用で不便が生じる可能性は、そんなに大きくないよということです。