Как работает область видимости в модулях Perl? - PullRequest
2 голосов
/ 13 мая 2010

Я не очень понимаю, как работает область видимости в модулях Perl. Это ничего не печатает. Я бы хотел, чтобы при запуске a.pl печаталось 1

b.pm

$f=1;

a.pl

use b;

print $f

Ответы [ 3 ]

11 голосов
/ 13 мая 2010

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

b.pm должно быть:

package b;
our $f = 1;
1;

a.pl должно быть

use b;
print $b::f

запустить все это с perl -I. a.pl

Теперь прочитайте perldocperlmod очень внимательно.

Также читайте perldocstrict.

3 голосов
/ 13 мая 2010

Вы должны начать с чтения модулей Perl в руководстве: perldoc perlmod в командной строке или перейти к http://perldoc.perl.org/perlmod.html.

2 голосов
/ 13 мая 2010

Краткий ответ: Скорее всего, потому что вы запускаете этот код в файловой системе без учета регистра, где при запросе модуля b загружается встроенный модуль B. Ваш модуль не загружается вообще. Если вы переименуете b, вы получите ожидаемый результат.

Более длинный ответ включал в себя множество обвинений за несоблюдение даже минимальной хорошей практики и был исключен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...