3

我得到了错误:

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

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

4

2 回答 2

6

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

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

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

于 2018-09-18T18:13:01.877 回答
6

您收到错误是因为您有一个名为 join 的子程序,因此您需要消除它的歧义。要使其调用内置,前置CORE::. 要使其调用子,请预先添加&.

该错误是因为您正在调用 sub 并且它实际上是一个期望对象或类作为第一个参数的方法,当您使用方法调用语法时会隐式发生这种情况。

于 2018-09-18T18:15:55.227 回答