歧义调用解析为CORE :: join(),具有此类资格或在以下位置使用&

时间:2018-09-18 18:06:41

标签: perl perl-core

我遇到了错误:

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

为什么第二个修复程序不起作用?

2 个答案:

答案 0 :(得分:5)

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

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

&join(...)明确地调用您的子例程(并覆盖其可能具有的所有原型)。至于您的子例程为什么对名为,_make_instance的程序包抛出奇异的错误,如果您不向我们显示代码,我们将无法回答。

答案 1 :(得分:5)

由于出现错误,因为您有一个名为join的子项,因此需要消除歧义。要使其成为内置函数,请在CORE::之前加上前缀。要使其成为子项,请在&前面加上。

错误是因为您正在调用sub,而它实际上是一个将对象或类作为第一个参数的方法,当您使用方法调用语法时会隐式发生。 / p>