最も危険な未定義値(undef)


最も危険な未定義値(undef)


perlにはundefという値があって、例えば、

my $a = undef;

とすることで未定義値を使用することができるのですが、

print $a + 5;

のような計算を行った場合、未定義値が数値として評価されることで、0(ゼロ)とみなされてしまうとても危険な値です。

この値を正しく使う場合、defined()で未定義値の判別を行うことが必要になります。

my $a = undef;                                 # 未定義値
my $b = 0;                                     # 数値

print "[ \$a, \$b ] : ";
expr($a, $b);                                  # 等価

print "[ defined(\$a), defined(\$b) ] : ";
expr(defined($a), defined($b));                # 不等価

sub expr {
   my $a = shift;
   my $b = shift;

   if ($a == $b) {
      print "equal\n";
   }
   else {
      print "not_equal\n";
   }
}

結果:

[ $a, $b ] : equal
[ defined($a), defined($b) ] : not_equal

この他にも文字列はヌルとして解釈されるなど、扱いが非常に面倒な値です。

Task Runner