http://qs321.pair.com?node_id=484617


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. ....