我遇到了错误:
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
为什么第二个修复程序不起作用?
答案 0 :(得分:5)
之所以收到警告,是因为您定义了一个名为join
的子例程。现在,Perl不确定join( ', ', @$args )
是应该调用内置函数还是您的子例程。
CORE::join
明确地调用内置的join
。
&join(...)
明确地调用您的子例程(并覆盖其可能具有的所有原型)。至于您的子例程为什么对名为,
和_make_instance
的程序包抛出奇异的错误,如果您不向我们显示代码,我们将无法回答。
答案 1 :(得分:5)
由于出现错误,因为您有一个名为join的子项,因此需要消除歧义。要使其成为内置函数,请在CORE::
之前加上前缀。要使其成为子项,请在&
前面加上。
错误是因为您正在调用sub,而它实际上是一个将对象或类作为第一个参数的方法,当您使用方法调用语法时会隐式发生。 / p>