exists
exists EXPRGiven an expression that specifies an element of a hash, this function returns true if the specified element in the hash has ever been initialized, even if the corresponding value is undefined.
print "True\n" if $hash{$key};
print "Exists\n" if exists $hash{$key};
print "Defined\n" if defined $hash{$key};Historically, exists may also
be called on array elements, but its behavior is less obvious and is
strongly tied to the use of delete on
arrays. However, calling exists on
array values is deprecated and likely to be removed in a future version
of Perl.
print "True\n" if $array[$index]; print "Exists\n" if exists $array[$index]; print "Defined\n" if defined $array[$index];
An element can be true only if it’s defined, and it can be defined only if it exists, but the reverse doesn’t necessarily hold.
EXPR can be arbitrarily complicated,
provided the final operation is a hash key or array index lookup:
if (exists $hash{A}{B}{$key}) { ... }Although the last element does not spring into existence just
because its existence was tested, intervening ones do. Thus, $$hash{"A"} and $hash{"A"}–>{"B"} both spring into
existence. This is not a function of exists, per se; it
happens anywhere the arrow operator is used (explicitly or
implicitly):
undef $ref;
if (exists $ref–>{"Some key"}) { }
print $ref; # prints HASH(0x80d3d5c)Even though the “Some key”
element didn’t spring into existence, the previously undefined $ref variable did suddenly come to hold an anonymous hash. This is ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access