Bug#810156: scalar of hashes not documented

Niko Tyni ntyni at debian.org
Thu Jan 7 13:42:09 UTC 2016


On Thu, Jan 07, 2016 at 11:21:57AM +0800, Dan Jacobson wrote:
> Package: perl-doc
> Version: 5.20.2-6
> Severity: minor
> 
> perldoc -f scalar makes absolutely no mention of what we see (/) here:
> $ perl -wle '$h{a}=0; print scalar %h;'
> 1/8

It doesn't explain what happens when you evaluate an array in scalar
context either, and I don't think it should.

However, perldata.pod has this paragraph under "Scalar values":

    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. If a tied
    hash is evaluated in scalar context, the "SCALAR" method is called
    (with a fallback to "FIRSTKEY").

which should be quite enough IMO.
-- 
Niko Tyni   ntyni at debian.org




More information about the Perl-maintainers mailing list