Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: Why does testing a key create a hash?

by Roger (Parson)
on Aug 17, 2005 at 22:01 UTC ( #484617=note: print w/replies, xml ) Need Help??


in reply to Why does testing a key create a hash?

Yes, this is a well known behavior/feature called autovivification. It basically means that Perl will create the variable on the fly. The use strict pragma will only stop autovivification of variables, but not hash elements. To test for the existance of a hash key with out creating it, you must use the exists function. Use along the lines of if exists $hash->{1} instead.

perldoc -f exists exists EXPR Given an expression that specifies a hash element or array element, returns true if the specified element in the hash or array has ever been initialized, even if the corresponding value is undefined. The element is not autovivified if it doesn't exist. print "Exists\n" if exists $hash{$key}; print "Defined\n" if defined $hash{$key}; print "True\n" if $hash{$key}; print "Exists\n" if exists $array[$index]; print "Defined\n" if defined $array[$index]; print "True\n" if $array[$index]; A hash or array element can be true only if it's defined, and defined if it exists, but the reverse doesn't necessarily hold true. ....

Replies are listed 'Best First'.
Re^2: Why does testing a key create a hash?
by friedo (Prior) on Aug 17, 2005 at 22:39 UTC
    Use if exists $hash->{1} instead.

    Nope, that will still cause $hash to become a hashref and print 1 if $hash; will print 1. exists takes a hash element, and you can't have a hash element without a hash! :)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://484617]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2022-12-06 20:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?