in reply to lazy creation of a hash
DB<102> p defined %h DB<103> %h=(a=>1) DB<104> p defined %h 1 DB<105> my %h=(a=>1); print defined %h 1
Cheers Rolf
UPDATE: Here what the docs say:
Use of defined on aggregates (hashes and arrays) is deprecated. It used to report whether memory for that aggregate has ever been allocated. This behavior may disappear in future versions of Perl. You should instead use a simple test for size:1. if (@an_array) { print "has array elements\n" }
2. if (%a_hash) { print "has hash members\n" }
UPDATE:
I think if you really need to distinguish between an empty hash and an non-existent hash, it can only be a package var. In this case checking the STASH should do.
UPDATE: I have to change my mind again... exists would check for a glob...
|
|---|