{{tag> note:perl undef}} ---json { "title":"最も危険な未定義値(undef)", "description":"最も危険な未定義値(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 この他にも文字列はヌルとして解釈されるなど、扱いが非常に面倒な値です。\\ ~~DISCUSSION~~