The real question is, do you need to test true when $h{key} is set and false? Then you use exists rather than just a boolean test.
Right. Then, there's also defined, which is kind of
"in between" testing for truth and existence.
I'm sure you know, but maybe for others the following
little truth table helps to summarize the relationships of what
can be tested with a hash:
sub truth_table {
my $hash = shift;
print " true? defined? exists?\n";
for my $key (qw(foo bar baz bla)) {
print " $key ";
printf " %-8d", $hash->{$key};
printf " %-8d", defined $hash->{$key};
printf " %-8d", exists $hash->{$key};
print "\n";
}
}
truth_table(
{
foo => 1, # true
bar => 0, # false
baz => undef, # undefined
# bla # doesn't exist
}
);
__END__
true? defined? exists?
foo 1 1 1
bar 0 1 1
baz 0 0 1
bla 0 0 0
|