Не удается обновить @INC с помощью экспорта PERL5LIB - PullRequest
0 голосов
/ 17 декабря 2018

Я пытаюсь добавить путь к модулю HTML :: Entities к @INC.Я экспортировал PERL5LIB=/mypath/HTML/, а затем source ~/.bashrc.Этот путь отражен в PERL5LIB, но не в @INC.Есть ли дополнительный шаг, который я пропускаю?

Я использую Perl 5.26.2 на CentOS6.5

Редактировать:

Я (ошибочно) предположил, что мойпуть не был добавлен в @INC, потому что когда я запускаю свой Perl-скрипт, я получаю

Can't locate HTML/Entities.pm in @INC (you may need to install the HTML::Entities module)
(@INC contains:
/home/hek/anaconda3/bin/aux/lib/perl5
/home/hek/anaconda3/lib/site_perl/5.26.2/x86_64-linux-thread-multi
/home/hek/anaconda3/lib/site_perl/5.26.2
/home/hek/anaconda3/lib/5.26.2/x86_64-linux-thread-multi
/home/hek/anaconda3/lib/5.26.2
)

(разрывы строк добавлены для удобства чтения)

Но он появляется ниже

echo $PERL5LIB
/opt/rh/devtoolset-2/root//usr/lib64/perl5/vendor_perl:/opt/rh/devtoolset-2/root/usr/lib/perl5:/opt/rh/devtoolset-2/root//usr/share/perl5/vendor_perl:/opt/perl/lib/site_perl/5.14.2/x86_64-linux-thread-multi/HTML/

perl -e 'use Data::Dumper; print Dumper(\@INC), "\n"'
$VAR1 = [
          '/opt/rh/devtoolset-2/root//usr/lib64/perl5/vendor_perl',
          '/opt/rh/devtoolset-2/root/usr/lib/perl5',
          '/opt/rh/devtoolset-2/root//usr/share/perl5/vendor_perl',
          '/opt/perl/lib/site_perl/5.14.2/x86_64-linux-thread-multi/HTML/',
          '/home/hek/anaconda3/lib/site_perl/5.26.2/x86_64-linux-thread-multi',
          '/home/hek/anaconda3/lib/site_perl/5.26.2',
          '/home/hek/anaconda3/lib/5.26.2/x86_64-linux-thread-multi',
          '/home/hek/anaconda3/lib/5.26.2',
          '.'
        ];

С какой стати возникла такая несоответствие?

У меня установлено несколько версий perl, но which perl возвращает версию, которую мне нужно использовать, ~/anaconda3/bin/perl.

Iпопытался изменить shebang в моем сценарии с #!/usr/bin/env perl на #!/~/anaconda3/bin/perl, но это не помогло.

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Две возможности:

  • Либо переменная PERL5LIB env не была установлена ​​в родительском элементе процесса perl, выдающего ошибку (например, вы запустили ее с веб-сервера), либо
  • Переключатель командной строки -T был предоставлен процессу perl, сообщившему об ошибке (поскольку это приводит к игнорированию PERL5LIB).

В любом случае вы можетеиспользуйте use lib в источнике вместо PERL5LIB.

0 голосов
/ 18 декабря 2018

Это краткое изложение проблем и утверждение того, что кажется наиболее простым решением.

Из результатов вашей тестовой однострочной работы ясно, что модуль, установленный в v5.14.2, используется в программе.предназначен для запуска под v5.26.2.Это нехорошо, даже если это работает.

Так что установите HTML::Entities под нужной сборкой perl, v5.26.2.

Это также решает проблему, о которой вы спрашиваетес тех пор вам не придётся копаться с PERL5LIB или чем-то еще.

Более того, @INC в вашем однострочном тесте явно не загружен в вашнастоящий бег, как ты и подозревал.Возможные причины приведены в ответе икегами, а также в решении на use lib "...";.Но тогда вам нужно использовать версию модуля, установленную для v5.26.2, и после того, как вы установили ее с этим perl, вам фактически не нужно будет указывать дополнительные пути к библиотекам.

Наконец, если вам в конечном итоге понадобитсяпо какой-то причине добавьте этот путь, не указывайте каталог HTML (последний), как указывает ответ Шона.При use HTML::Entities будет выполняться поиск в каталоге HTML (для файла Entities.pm), и вам нужно только указать каталог, в котором он содержится.

0 голосов
/ 17 декабря 2018

use HTML::Entities ищет файл HTML/Entities.pm в каталогах в @INC.Такой путь не найден, потому что он ищет такие, как /opt/perl/lib/site_perl/5.14.2/x86_64-linux-thread-multi/HTML/HTML/Entities.pm.

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

Edit: есть еще несоответствие версий, но пока модуль является чистым Perl без каких-либо компонентов XS, я не думаю , что будет большой проблемой.Тем не менее, лучше выбрать правильный путь для версии Perl, которую вы на самом деле используете.Сделайте это, и вам вообще не придется манипулировать путем поиска.

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