偽について
back
式が「偽」になるのは
(1) 0 のとき (数値コンテキストで 0 のとき)
(2) 空文字のとき (文字列コンテキストで文字列長が 0 のとき)
(3) 未定義のとき (undef である)
の3通り。
(1) の注意点として、
$val = "00";
$val = "0.0";
$val = "-0";
などは、数値ではなく文字列として評価されるので、真になる。
逆に
$val = "0";
は、偽になる。
$val = 0;
$val = 0.0;
$val = -0;
これらは当然、偽。
入力値チェックで
unless ($ARGV[0]) {
print "argument is not set\n";
exit;
}
みたいに「入力値があるかどうか」をチェックした場合、
入力値が "0" の場合に、このコードだとエラー扱いになってしまう。
こういう場合は、
if (not defined $ARGV[0]) {
print "argument is not set\n";
exit;
}
と、defined 関数を使ってチェックする。
defined は 0 or 空文字 と undef を唯一区別できる。
0 と 空文字を区別するには、対象の length の戻り値を使う
(0 なら 1 / 空文字なら 0 になる)
back