Well if we are going to this way, I would use 'exists' for the hash key and 'defined' for the array element, a personal preference.
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
my %a;
if ( exists $a{'abd'}
and defined $a{'abd'}->[0]
)
{ print "yes\n"}
print Dumper \%a;
__END__
Prints:
$VAR1 = {};
I prefer the arrow notation instead of $a{abd}[0]
However,
Update: not the same! forgot about 0, zero, Ooops
if ( $a{'abd'} and $a{'abd'}->[0])
{ print "yes\n"}
is the same.
Whether each term doesn't "exist" or is not "defined" has the same true/false meaning. To prevent the autovivification, each "level" of the hash has to be tested, starting from the first. As long as that is done, it doesn't matter whether 'exists' or 'defined' is tested for subsequent levels.
|