不明确的调用解析为 CORE::join(),符合条件或使用 & 在

Ambiguous call resolved as CORE::join(), qualify as such or use & at

我遇到错误:

Ambiguous call resolved as CORE::join(), qualify as such or use & at

当我修复错误时:

$args =  CORE::join( ', ', @$args );

一切正常。

但是当我将其修复为:

$args =  &join( ', ', @$args );

根据错误消息的提示,我得到了不同的错误:

Can't locate object method "_make_instance" via package ", " (perhaps you forgot to load ", "?) at

为什么第二次修复不起作用?

您收到该警告是因为您定义了一个名为 join 的子例程。现在 Perl 不确定 join( ', ', @$args ) 是应该调用内置函数还是你的子例程。

CORE::join 明确调用内置 join.

&join(...) 明确调用您的子例程(并覆盖它可能具有的任何原型)。至于为什么你的子程序会抛出关于名为 ,_make_instance 的包的奇怪错误,如果你不向我们展示代码,我们无法回答。

您收到错误是因为您有一个名为 join 的子项,所以您需要消除它的歧义。要使其调用内置函数,请在前面添加 CORE::。要使其调用 sub,请在前面添加 &

错误是因为您正在调用子程序并且它实际上是一个需要对象或class作为第一个参数的方法,这将隐式发生当您使用方法调用语法时。