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:
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?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};
UPDATE: This article's title (Ambiguous calls) was renamed to "'Ambiguous call' diagnosis seems ambiguous" because the former was ambiguous.
Back to
Seekers of Perl Wisdom