undef, defined, exists

perlにおける未定義値はundef。これはmy $var;と同値である。
変数の値が定義されているかは、defined関数で調べる。
hashのキーが定義されているかはexists関数。

use strict;
my $var;
my $foo = undef;

print "\$var eq \$foo is TRUE\n" if ($var eq $foo);
print "\$var == \$foo is TRUE\n" if ($var == $foo);
print qq(\$var eq "" is TRUE but it's not same.\n) if ($var eq "");
print qq(\$var == "" is TRUE but it's not same.\n) if ($var == "");
print qq(defined("") is TRUE\n) if (defined(""));
print qq(defined(\$var) is FALSE\n) if (!defined($var));

print qq#---------------\n\n#;


my %hash = (var=> 1, foo=>undef);
print qq#defined(\$hash{foo}) is FALSE\n# if (!defined($hash{foo}));
print qq#defined(\$hash{piyo}) is also FALSE.\n# if (!defined($hash{piyo}));
print qq#exists(\$hash{foo}) is TRUE\n# if (exists($hash{foo}));
print qq#exists(\$hash{piyo}) is FALSE.\n# if (!exists($hash{piyo}));