What is 4/16 in hashes?

前端 未结 6 653
情深已故
情深已故 2020-12-10 12:05
if (%hash){
     print \"That was a true value!\\n\";
}

That will be true if (and only if) the hash has at least

6条回答
  •  情歌与酒
    2020-12-10 12:40

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

    so, 4/16 would be the buckets used/allocated count, and something like the following will display this value:

    %hash = (1, 2);
    print scalar(%hash); #prints 1/8 here
    

提交回复
热议问题