[Omaha.pm] print "%hash";
Travis McArthur
travis at travisbsd.org
Tue Oct 16 15:55:26 PDT 2007
Jay Hannah wrote:
> I hit this code today
>
> $body .= "Email Address: ".$$results{email}."%0D%0A" if ($$results{email});
>
> and thought "What? Isn't Perl going to try to interpret "%0D" as a hash?
>
> Nope.
>
> "%hash" is not interpreted at all. It's just a string.
>
> Fun with hashes below...
>
> j
>
>
> $ cat j.pl
> my %j = ( a => 1, b => 2 );
> print %j, "\n";
> print %j . "\n";
> print "%j\n";
>
> $ perl j.pl
> a1b2
> 2/8
> %j
>
>
> 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.
>
> _______________________________________________
> Omaha-pm mailing list
> Omaha-pm at pm.org
> http://mail.pm.org/mailman/listinfo/omaha-pm
>
>
That's rather unusual but very useful, I don't know any other language
that has built in hashing functionality to have that sort of
instrumentation (regarding allocated buckets versus full buckets). I
never knew that! Awesome stuff, I like how Perl pretty intelligently
guesses what you want to know, which is nice. Thanks for bringing this
up Jay.
Best Regards,
Travis
More information about the Omaha-pm
mailing list