偽について

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