simple question

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

   ...

N


More information about the MiltonKeynes-pm mailing list