Неоднозначный вызов разрешается как 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
Мы не можем ответить, если вы не покажете нам код.