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
($
).