2013-03-19 2 views
0

У меня есть скрипт perl (MyTest.pl), который включает (использование) два модуля (MyA.pm и MyB.pm). Проблема заключается в том, что модуль A также должен включать модуль B, но это, похоже, не работает, поскольку оно уже включено в файл .pl.Использовать (включать/требовать) тот же файл дважды

MyTest.pl

use MyA; 
use MyB; 
print hello(); # defined in MyB 

MyA.pm

use MyB; 
print hello(); # defined in MyB 

Perl утверждает, что подпрограмма привет неопределен при вызове из MyA.pm. Из того, что я могу понять, кажется, что использует, работает только там, где он используется (ха!) В первый раз.

Любые подсказки?

ответ

1

Вы не показываете нам import метода MyB или сказать нам, если он наследует import метода стандартного модуля как Exporter. Без метода import подпрограмма MyB::hello не может быть псевдонимом в пространствах имен Main или MyA.

Ваши 2 варианта должны сделать импорт или использовать полное имя MyB::hello.

Редактировать: Хм, Я также заметил, что вы не используете имя package в MyA. Все ли ваши модули используют пространство имен Main в качестве своего личного ящика для мусора?

+0

Я экспортирую функцию 'hello', используя' Exporter'. Но вы мне помогли, я не использовал 'package' в' MyB'. Это работает сейчас, спасибо. – Andreas

+0

Это интересно. Интересно, как выглядит '* Main :: hello' после того, как вы импортируете' & Main :: hello' в свое собственное пространство имен. Я не могу представить, что это хорошо. Корм для другого дня .... – tjd

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