Неоднозначный вызов разрешается как CORE::join(), квалифицируется как таковой или используется & 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

почему второе исправление не работает?

2 ответа

Решение

Вы получаете сообщение об ошибке, потому что у вас есть подпункт с именем join, поэтому вам нужно устранить его. Чтобы сделать это вызов встроенным, пред CORE::, Чтобы сделать это вызвать саб, пред &,

Ошибка заключается в том, что вы вызываете подпрограмму, и на самом деле это метод, который ожидает объект или класс в качестве первого параметра, что неявно происходит при использовании синтаксиса вызова метода.

Вы получаете это предупреждение, потому что вы определили подпрограмму под названием join, Теперь Perl не уверен, join( ', ', @$args ) должен вызывать встроенную функцию или вашу подпрограмму.

CORE::join однозначно называет встроенный join,

&join(...) однозначно вызывает вашу подпрограмму (и переопределяет любой ее прототип). Что касается того, почему ваша подпрограмма выдает странные ошибки о пакете под названием , а также _make_instance Мы не можем ответить, если вы не покажете нам код.

Другие вопросы по тегам