
Недавно я установил CentOS 6.3 (i386).
Он имеет два двоичных файла Perl
/usr/bin/perl (v5.10.1)
/usr/local/appx/perl/bin/perl (v5.8.8)
Мой вопрос: возможно ли установить какие-либо другие функции в это приложение, используя общесистемный Perl и модуль Perl из этого приложения?
Как показано ниже:
./configue -prefix=/usrl/local/app_xyz -perl_lib_path=/usr/local/appx/perl/lib/5.8.8/
Я попробовал сделать все вышеперечисленное, но получил следующую ошибку:
RRD Perl Module -----------------**Not Found**
Но этот модуль Perl RRDs.pm
доступен в /usr/local/appx/lib/5.8.8
каталоге.
Кроме того, configure
скрипту не нужно ARG
сопоставлять наш двоичный путь perl appx ( /usr/local/appx/perl/bin/perl
), он автоматически выбирает общесистемный perl по умолчанию.
решение1
Второстепенные версии Perl 5 обратно совместимы, поэтому модуль 5.8.8 должен работать с perl 5.10.1 (но есть исключение, см. ПРЕДОСТЕРЕЖЕНИЕ ниже). Путь включения ( @INC
) настраивается при сборке perl, но @INC
может быть изменен отдельными программами, и глобально содержимое переменной окружения $PERL5LIB добавляется в начало.
export PERL5LIB=/usr/local/appx/lib/5.8.8
Однако этот подход имеет одну проблему. Потому что $PERL5LIB — этодобавленныйв @INC
, то это приведет к тому, что каталог 5.8.8 будет иметь приоритет при загрузке различных стандартных модулей. Это нежелательно.
Итак, менее аккуратная, но в конечном итоге лучшая идея — просто сделать символическую ссылку /usr/local/appx/lib/5.8.8/RRD.pm
(и/или каталог RRD, если он есть) на /usr/local/lib/perl5
или какой-то другой стандартный @INC
каталог. Вы можете увидеть их с помощью:
perl -e 'print "$_\n" foreach @INC'
Обратите внимание, что может существовать как каталог RRD.pm верхнего уровня, так и параллельный каталог RRD; в таком случае необходимо создать символическую ссылку на оба каталога.
ПРЕДОСТЕРЕЖЕНИЕ
Некоторые модули perl включают части, скомпилированные из C, и они могут сломаться. Если RRD.pm не использует C, то вам не о чем беспокоиться. Если использует, вам следует скопировать его вместо создания символической ссылки и пересобрать; для этого вам нужен исходный код, который может быть, а может и не быть :(