Hi Monks, 'warnings' pragma carps when a script calls a function ambiguously.
To be more concrete,
A subroutine you have declared has the same name as a Perl keyword,
and you have used the name without qualification for calling one or the other.
Perl decided to call the builtin because the subroutine is not imported.
(perldiag / Ambiguous call resolved as CORE::%s(), qualify as such or use &)
I think the above diagnosis is ambiguous in the following situation:
use strict;
use warnings;
sub each { warn 'main::each() was called' }
sub delete { warn 'main::delete() was called' }
my %person = ( name => 'Ken Takakura' );
while ( my ($key, $val) = each %person ) {
print "$key: $val\n";
}
delete $person{name};
In this case, 'warnings' pragma complains about
each %person,
but the pragma considers
delete $person{name} not to be an ambiguous call.
I think the pragma should complain about
delete, too.
What's the difference between
each and
delete calls in the above situation?
UPDATE:
This article's title (Ambiguous calls) was renamed to "'Ambiguous call' diagnosis seems ambiguous" because the former was ambiguous.