nik at ngo.org.uk
Mon Nov 13 13:35:29 PST 2006
Paul Mooney wrote:
> I used the scalar() function on a hash which is not exactly sane but I
> just wanted to know roughly what was in it. I expected it to treat the
> hash like a list but it did something quite different. Google has not
> helped me, neither has my "Programming Perl" (2nd edition).
> Can anyone tell me why the scalar value comes out as "5/8" in the code
> below? If 5 is the number of keys, is 8 some sort of storage value?
% perldoc perldata
If you evaluate a hash in scalar context, it returns false if the hash
is empty. If there are any key/value pairs, it returns true; more
precisely, the value returned is a string consisting of the number of
used buckets and the number of allocated buckets, separated by a
slash. This is pretty much useful only to find out whether Perl's
internal hashing algorithm is performing poorly on your data set. For
example, you stick 10,000 things in a hash, but evaluating %HASH in
scalar context reveals "1/16", which means only one out of sixteen
buckets has been touched, and presumably contains all 10,000 of your
items. This isn't supposed to happen.
More information about the MiltonKeynes-pm