2017-02-21 3 views
0

Я вызываю функцию (func1) из library2.pm в library1.pm. И функция называется просто как & func1(), так как я объявил «use library2» в library1. Но это вызывает ошибку как неопределенную подпрограмму. Но когда я называю эту функцию «& library2 :: func1», она работает. Я пропустил какой-либо пакет Perl здесь?Неопределенная подпрограмма в perl & library1 :: func1

+1

Просьба предоставить минимальную демонстрацию проблемы. – ikegami

ответ

2

Вы экспортировали функцию? Трудно сказать, что вам не хватает, так как вы не отправили код! Я мог бы объяснить, почему вам нужно то, что отсутствует, если я знаю, что это такое. Вместо этого вам придется согласиться на пример того, что необходимо.

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; 

, потому что это легче увидеть, где подводные лодки определены, и это предотвращает неожиданности, если экспорт по умолчанию модуля когда-либо меняются.

+0

Указанный вами синтаксис абсолютно правильный. Но когда я вызываю func1 в library1 без указания library2 :: func1, я получаю ошибку. Я хочу знать точную причину этого и спасибо за ваш ответ. –

+1

Трудно сказать, что вам не хватает, так как вы не отправили код! Я мог бы объяснить, почему вам нужно то, что отсутствует, если я знаю, что это такое. Вместо этого вам придется согласиться на пример того, что необходимо. Если вы хотите продемонстрировать свою проблему, мы сможем предоставить дополнительную информацию. Или, по крайней мере, вы можете сказать мне, какие строки, которые я опубликовал, отсутствуют в вашем коде. – ikegami

+0

Все в порядке. большое спасибо –

Смежные вопросы