Perl - Local::lib не всегда находит локальный путь в @INC - конфликт с perlbrew?

У меня нет root-доступа к системе, поэтому я устанавливаю модули perl, используя local::lib, который я установил с помощью метода начальной загрузки:

perl Makefile.PL --bootstrap=~/foo
make test && make install
echo '[ $SHLVL -eq 1 ] && eval "$(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)"' >>~/.bash_profile

Затем я успешно установил cpanm и использовал cpanm для установки модуля FAST. Однако, когда я пытаюсь использовать функцию fasgrep, я получаю следующую ошибку:

% fasgrep
Can't locate FAST.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /home/dpearton/perl5/bin/fasgrep line 5.

Я проверил, что FAST.pm доступен в локальной библиотеке, но, похоже, система его там не ищет.

в соответствии с переменными пути это должно выглядеть в правильном месте:

$ echo PATH=$PATH ; env|sort|grep PERL
PERL5LIB=/home/dpearton/perl5/lib/perl5:/home/dpearton/perl5/lib/perl5
PERLBREW_BASHRC_VERSION=0.73
PERLBREW_HOME=/home/dpearton/.perlbrew
PERLBREW_ROOT=/home/dpearton/perl5/perlbrew
PERL_LOCAL_LIB_ROOT=/home/dpearton/perl5
PERL_MB_OPT=--install_base "/home/dpearton/perl5"
PERL_MM_OPT=INSTALL_BASE=/home/dpearton/perl5

Я даже добавил экспорт PER5LIB=$HOME/perl5/lib/perl5 в мой.bash_profile, и он все еще не работает.

Я очень новичок в использовании Perl. Может быть проблема в том, что у меня также установлен perlbrew? Если так, как я могу сделать "чистую" деинсталляцию prebbrew?

1 ответ

Оболочка, в которой вы напечатали свою среду, показывает PERL5LIB настроен на добавление

/home/dpearton/perl5/lib/perl5

а также

/home/dpearton/perl5/lib/perl5

в @INCно ни один из этих (идентичных) путей не найден в @INC из perl что пытался загрузить FAST.pm,

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

  • Тот perl унаследовал среду, отличную от той, которую вы сбросили, или
  • Тот perl был начат с -T (режим загрязнения).

Проверьте линию Шебанга fasgrep увидеть, если -T был использован, чтобы исключить такую ​​возможность. я сомневаюсь, что -T использовался. Он добавляет некоторые проверки безопасности для предотвращения попадания пользовательского ввода в выполняемые команды. Удаление -T будет просто удалить эти проверки. Поскольку этот скрипт не доступен ни извне, ни в setuid, преимущества -T уже совсем минимальны. Если это проблема, иди и удали ее.

Я подозреваю, что это другая возможность, тем более что вы показали fasgrep был запущен из другого приглашения (%) чем тот, от которого ты бежал set ($).

Другие вопросы по тегам