in reply to Scalar to a hash, what is that?

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

I'm sure there's more that can be said about Perl's internal hashing algorithm, but perhaps someone else could fill that in because the internals of Perl are not my strong side.

-- 
dempa

Replies are listed 'Best First'.
Re: Re: Scalar to a hash, what is that?
by integral (Hermit) on Jan 28, 2003 at 18:59 UTC
    Background on how hashing works:

    A hash consists of a set of 'buckets' that can hold zero or more values. To decide which bucket to put your data value in a hash function is used to transform your string key into an IV. This is then used to pick which bucket (probably using hash % @buckets, but I'm not sure on perl specifics), to place the datum in. The value perl returns consists of two parts. The first is the number of buckets that have been used, and the second is the total number of buckets.

    As perldata says you can use this as a metric to see how well perl is hashing your data. Ideally the hash should spread your keys out evenly across the buckets. In the real world the hashing function has to work well for lots of different types of keys. If you see a low utilisation of the buckets this indicates a problem of this kind.