http://www.perlmonks.org?node_id=985126

anazawa has asked for the wisdom of the Perl Monks concerning the following question:

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.