Я вызываю функцию (func1) из library2.pm в library1.pm. И функция называется просто как & func1(), так как я объявил «use library2» в library1. Но это вызывает ошибку как неопределенную подпрограмму. Но когда я называю эту функцию «& library2 :: func1», она работает. Я пропустил какой-либо пакет Perl здесь?Неопределенная подпрограмма в perl & library1 :: func1
ответ
Вы экспортировали функцию? Трудно сказать, что вам не хватает, так как вы не отправили код! Я мог бы объяснить, почему вам нужно то, что отсутствует, если я знаю, что это такое. Вместо этого вам придется согласиться на пример того, что необходимо.
library2.pm
должна включать в себя:
package library2;
use strict;
use warnings;
use Exporter qw(import);
our @EXPORT = qw(func1);
...
sub func1 { ... }
...
1;
library1.pm
должна включать в себя:
package library1;
use strict;
use warnings;
use library2;
...
func1(...)
...
1;
Кстати, название языка Perl, не PERL. Это не аббревиатура.
Кстати, вы должны прекратить использовать &
перед подразделами вызовов; нет оснований говорить, что Perl игнорирует прототипы подсайтов, которые вы вызываете.
К слову, имена модулей нижнего регистра технически зарезервированы для использования Perl. Но что более важно, конвенции резервируют модули нижнего регистра для модулей pragma (модули, которые влияют на язык, и модули, которые имеют лексически-область действия). Пожалуйста, избегайте имен модулей нижнего регистра.
Кстати,
use library2 qw(func1);
, как правило, лучше, чем
use library2;
, потому что это легче увидеть, где подводные лодки определены, и это предотвращает неожиданности, если экспорт по умолчанию модуля когда-либо меняются.
Указанный вами синтаксис абсолютно правильный. Но когда я вызываю func1 в library1 без указания library2 :: func1, я получаю ошибку. Я хочу знать точную причину этого и спасибо за ваш ответ. –
Трудно сказать, что вам не хватает, так как вы не отправили код! Я мог бы объяснить, почему вам нужно то, что отсутствует, если я знаю, что это такое. Вместо этого вам придется согласиться на пример того, что необходимо. Если вы хотите продемонстрировать свою проблему, мы сможем предоставить дополнительную информацию. Или, по крайней мере, вы можете сказать мне, какие строки, которые я опубликовал, отсутствуют в вашем коде. – ikegami
Все в порядке. большое спасибо –
- 1. Perl: Неопределенная подпрограмма & main
- 2. Perl use Package - AH01215: Неопределенная подпрограмма
- 3. Неопределенная подпрограмма & main :: unlock
- 4. Неопределенная подпрограмма называется
- 5. Неопределенная подпрограмма & main :: promt
- 6. Неопределенная подпрограмма CGI :: remote_port
- 7. Процедура в модуле - это неопределенная подпрограмма в perl
- 8. Неопределенная подпрограмма CGI :: radio
- 9. perl «do» works «require» не выполняет: неопределенная подпрограмма
- 10. ошибка «неопределенная подпрограмма» с perl Файл :: Копировать mkpath
- 11. неопределенная подпрограмма и главная :: ThrowTemplateError
- 12. Perl - Подпрограмма переопределена
- 13. Подпрограмма подпрограммы perl
- 14. Подпрограмма подпрограммы Perl
- 15. Perl noob, undefined подпрограмма?
- 16. "func2 (func1 arg)", "(func2. Func1) arg" или "func2 $ func1 arg"?
- 17. Perl CGI onclick call perl подпрограмма
- 18. Perl подпрограмма возвращает пустое значение
- 19. Perl: splice() array using подпрограмма
- 20. cygwin perl подпрограмма не работает
- 21. Подпрограмма подпрограммы perl добавляет «1»
- 22. Подпрограмма Perl, возвращающая неожиданное значение
- 23. Perl Anonymous Подпрограмма/Функция ошибки
- 24. Подпрограмма Perl sort my_compare (@d);
- 25. подпрограмма в perl для выполнения записей #ARGV
- 26. perl anonymous подпрограмма в названной подпрограмме
- 27. Detect как подпрограмма вызывается в Perl
- 28. Неопределенная подпрограмма & пакет :: подпрограмма, вызываемая по строке <of script>
- 29. Неопределенная подпрограмма LWP :: Протокол :: https :: Socket :: can_read под названием
- 30. Почему наблюдаемые наблюдаемые (Func1) и Observable.replay (Func1) наблюдаемые наблюдаемые?
Просьба предоставить минимальную демонстрацию проблемы. – ikegami