Perl の undef の取り扱いの注意 #1

use strict;

$hoge = undef;

if ($hoge == 0) {
print "fuga\n";
}

if ($hoge eq '') {
print "foo\n";
}

これ, use strict してても実行すると,

fuga
foo

ってでます.
$hoge が 数字とか文字とかと比較されると,
Perl は勝手に気を使って, 数字っぽく ないしは 文字列っぽく 扱ってしまうみたいです.

テストするときなどは, ちゃんと defined してからにしましょう.

use strict;

my $hoge = undef;

if (defined $hoge) {
^---if ($hoge == 0) {
^---^---print "fuga\n";
^---}

^---if ($hoge eq '') {
^---^---print "foo\n";
^---}
}