Где я могу установить модули Perl, которые я написал? - PullRequest
3 голосов
/ 07 декабря 2009

Я написал несколько модулей и пытаюсь их запустить. Как я скажу, где взять модуль?

Я пишу в Windows, и пытался вставить его в c:\perl\lib, но это не помогло.

Можно ли поместить его в тот же каталог, что и файл, который вызывает модуль?

Ответы [ 3 ]

13 голосов
/ 07 декабря 2009

Perl использует пути в:

@INC

для поиска модулей. (файлы .pm)

Если вы:

perl -e 'print join "\n", @INC;'

вы увидите, какие пути в настоящее время ищутся для модулей. (Этот список @INC скомпилирован в исполняемый файл perl)

Тогда вы можете:

BEGIN { unshift @INC, 'C:\mylibs' }

или

use lib 'C:\mylibs'

и поместите MyModule.pm в C: \ mylibs для включения:

use MyModule;
6 голосов
/ 07 декабря 2009

Это именно то, для чего предназначена local :: lib . По умолчанию use local::lib; добавит ~/perl5 к пути поиска вашего модуля (@INC), но вы можете легко сказать ему добавить другой каталог.

Если вы делаете это с фиксированным каталогом (а не с одним по отношению к вашему домашнему каталогу), то вы, вероятно, также хорошо справляетесь с use lib 'PATH'.

Если это для кода, который будет запускаться только из командной строки, другим вариантом будет создание переменной среды PERL5LIB, которая указывает на каталог вашего личного модуля. Это повлияет на весь Perl, запускаемый вашей учетной записью пользователя из командной строки, поэтому вам не нужно вообще изменять свой код Perl с помощью этого метода, но сложнее настроить его для кода не из командной строки (например, веб-скрипты ) и, если код будет выполняться несколькими пользователями, PERL5LIB необходимо будет установить для всех них.

Я бы ни в коем случае не рекомендовал бы связываться с @INC напрямую. Есть много простых способов сделать это в наши дни.

4 голосов
/ 07 декабря 2009

Для библиотек для приложений общим подходом является использование модуля FindBin для поиска каталога приложения, а затем use lib для добавления библиотеки приложения в @INC:

use FindBin;
use lib "$FindBin::Bin/lib";
use AppModule;

Для модулей общего назначения я рекомендую разрабатывать их так же, как и для выпуска CPAN (например, начать с module-starter), и устанавливать их с помощью perl (обычно в site/lib). См. Также: Какой каркас следует использовать для написания модулей?

Если вы не можете установить с помощью perl (т.е. у вас нет необходимых разрешений), вы можете вместо этого иметь личную библиотеку. См. Как мне сохранить каталог моего собственного модуля / библиотеки? в perlfaq8.

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