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

Eug*_*kov 3 perl perl-core

我有错误:

Ambiguous call resolved as CORE::join(), qualify as such or use & at
Run Code Online (Sandbox Code Playgroud)

当我修复错误时:

$args =  CORE::join( ', ', @$args );
Run Code Online (Sandbox Code Playgroud)

一切正常.

但当我把它修复为:

$args =  &join( ', ', @$args );
Run Code Online (Sandbox Code Playgroud)

正如错误消息所示,我得到了不同的错误:

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

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

yst*_*sth 6

您收到错误是因为您有一个名为join的子命令,因此您需要消除它的歧义.为了使它调用内置,前置CORE::.为了使它调用sub,prepend &.

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


mel*_*ene 5

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

CORE::join毫不含糊地调用内置的join.

&join(...)明确地调用您的子程序(并覆盖它可能具有的任何原型).至于为什么你的子程序引发离奇失误介绍了一个包,_make_instance,我们不能回答这个问题,如果你不告诉我们的代码.