Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: Scalar to a hash, what is that?

by dempa (Friar)
on Jan 28, 2003 at 18:34 UTC ( [id://230680]=note: print w/replies, xml ) Need Help??


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.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://230680]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (6)
As of 2024-03-28 10:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found