in reply to Re: Best Hash Practices?
in thread Best Hash Practices?

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