Perl ищет в текущем каталоге (.) Модули? - PullRequest
4 голосов
/ 16 января 2011

Perl смотрит. (текущий каталог) для модулей? Я не могу напрямую установить модуль и думаю, что могу скопировать его в локальный каталог. Это правда?

Ответы [ 6 ]

14 голосов
/ 16 января 2011

perl -V распечатает различные свойства вашей установки Perl, включая значение по умолчанию @INC. Вы должны заметить там .: да, в текущем рабочем каталоге по умолчанию выполняется поиск модулей.

(Если нет, вы можете использовать переменные окружения PERL5LIB или PERLLIB, или -I в командной строке, или добавить sitecustomize.pl к perl -V:sitelib.)

6 голосов
/ 16 января 2011

В ответ на обсуждение Кэмерона и Чриста в комментариях к одному из ответов.

Вы можете использовать этот фрагмент для использования модулей в том же каталоге, что и сценарий, даже если сценарий выполняется в другомкаталог.

use Cwd 'abs_path';
use File::Basename;
use lib dirname( abs_path $0 );

Должен работать во всех случаях и на всех ОС.(источник: http://use.perl.org/~Aristotle/journal/33995)

5 голосов
/ 30 ноября 2016

В последнее время была некоторая причина не полагаться на то, что . находится в @INC больше, чем обычно, а именно, что это поведение по умолчанию планируется удалить в Perl 5.26. См. Примечания к выпуску для разработки здесь: https://metacpan.org/pod/release/EXODIST/perl-5.25.7/pod/perldelta.pod#and-INC

Общеизвестно, что это делается для устранения уязвимостей, которые были замечены в некоторых приложениях в результате такого поведения. CVE не были опубликованы публично (пока).

0 голосов
/ 16 января 2011

Perl ищет каталоги в массиве @INC при поиске модулей.

Пожалуйста, обратитесь к следующему вопросу о том, как создается этот массив (это скажет вам, как можно добавить ваш текущий или домашний каталог):

Как создается @INC в Perl? (ака, как все это влияет на то, где ищут модули Perl?)

Пожалуйста, обратитесь к следующему вопросу о том, как Perl находит фактический файл для модуля:

Как Perl-программа знает, где найти файл, содержащий модуль Perl, который она использует?

0 голосов
/ 16 января 2011

Когда вы распаковываете tar-каталог модуля, создайте его Makefile с необязательным аргументом библиотеки с именем любого личного каталога, в который вы хотите поместить содержимое модуля:

$ perl Makefile.PL LIB=~/perllibs

Затем убедитесь, что ваш каталог ~/perllibs включен в ваш $PERL5LIB envariable.

0 голосов
/ 16 января 2011

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

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