最も危険な未定義値(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
この他にも文字列はヌルとして解釈されるなど、扱いが非常に面倒な値です。