mirror of
https://github.com/netwide-assembler/nasm.git
synced 2025-07-24 10:25:42 -04:00
warnings.pl: BR 3392585: don't use scalar(%hash)
The idiom scalar(%hash) seems similar to scalar(@array), and in fact is in current versions of Perl. However, in older versions of Perl, the former is totally useless: Prior to Perl 5.25 the value returned was 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. As of Perl 5.25 the return was changed to be the count of keys in the hash. If you need access to the old behavior you can use "Hash::Util::bucket_ratio()" instead. Use scalar(keys %hash) instead. Reported-by: Orkan Sezer <sezeroz@gmail.com> Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
This commit is contained in:
parent
177a05d0ce
commit
d73b10abd5
@ -210,7 +210,7 @@ if ($what eq 'c') {
|
||||
print $out "\tconst char *name;\n";
|
||||
print $out "\tenum warn_index warning;\n";
|
||||
print $out "};\n\n";
|
||||
printf $out "#define NUM_WARNING_ALIAS %d\n", scalar(%aliases);
|
||||
printf $out "#define NUM_WARNING_ALIAS %d\n", scalar(keys %aliases);
|
||||
|
||||
printf $out "extern const char * const warning_name[%d];\n",
|
||||
$#warnings + 2;
|
||||
|
Loading…
x
Reference in New Issue
Block a user