Настройка PERL5LIB - PullRequest
       1

Настройка PERL5LIB

9 голосов
/ 02 марта 2011

Могу ли я установить PERL5LIB в отдельном скрипте и вызвать этот скрипт в других скриптах? Как мне это сделать? И как это повлияет на сценарий, в котором он используется?

Спасибо.

Ответы [ 5 ]

7 голосов
/ 02 марта 2011

Установка PERL5LIB во время выполнения не повлияет на путь поиска Perl. Вам необходимо экспортировать переменную перед выполнением интерпретатора.
В качестве альтернативы вы можете изменить @INC во время компиляции (также возможно сделать в отдельном скрипте / модуле):

BEGIN { unshift @INC, "/path/to/dir" }

Это то, что делает lib прагма.

3 голосов
/ 02 марта 2011

Вы бы сделали это с помощью 'use lib', а не манипулируя окружением:

use lib '/home/perl5';

Это может быть отдельный файл, в котором вы "нуждаетесь".

1 голос
/ 20 мая 2014

PERL5INC - это переменная окружения shell , поэтому вы не устанавливаете ее внутри вашей Perl-программы (обычно), а вместо этого задаете ее перед вызовом Perl. Ниже приведена команда оболочки, где я использовал PERL5LIB, чтобы указать prove, чтобы найти модуль Perl, находящийся в ~/OnePop:

$ PERL5LIB=~/OnePop prove -l t
... PERL5LIB is unset here ....

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

$ export PERL5LIB=~/OnePop
...
$ prove -l t
... PERL5LIB continues to be set here ...

Если вы забудете ключевое слово export в вышеприведенном примере (т.е. присваиваете значение, используя PERL5LIB=~/OnePop в отдельной строке), переменная будет установлена ​​в оболочке , , но будет не будет наследоваться какими-либо командами, которые вы запускаете (это означает, что prove не сможет его увидеть).

Наконец, если вы хотите установить переменную окружения PERL5LIB изнутри Perl-программы, вам нужно написать ее так:

$ENV{PERL5LIB} = glob("~/OnePop");   # glob() expands the tilde
system(qw( prove -l t ));

Хотя, как уже указывали другие, если вы хотите указать путь включения изнутри Perl, проще / лучше использовать use lib $PATH.

0 голосов
/ 01 мая 2018

Альтернатива PERL5LIB:

Вместо этого вы можете установить последнюю доступную версию Perl 5 (конечно, не в системной папке).После того, как вы использовали файл модуля или сделали все необходимое, чтобы новые исполняемые файлы perl и cpan были видны вашей оболочке, вы можете использовать cpan для установки всех необходимых вам модулей.Иногда я делал это для отдельных приложений, аналогично использованию виртуальных сред Python.

0 голосов
/ 02 марта 2011

PERL5INC - это переменная окружения. Переменные среды наследуются только от родителей их детям и не могут (легко) быть установлены наоборот. Если вы хотите сохранить дополнительные пути поиска во внешнем файле, я предлагаю вам составить простой список путей и написать простой цикл для чтения каждого пути из файла и манипулирования @INC в текущем процессе. Если вы хотите, чтобы это было сделано рано во время компиляции, вам придется использовать блок BEGIN {}.

Например

BEGIN{
  open(INCFILE,"<","my.inc.file") or die($!);
  foreach(<INCFILE>){
    push @INC,$_;
  }
  close(INCFILE);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...