ПРЕДОСТЕРЕЖЕНИЕ

ПРЕДОСТЕРЕЖЕНИЕ

Недавно я установил 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, то вам не о чем беспокоиться. Если использует, вам следует скопировать его вместо создания символической ссылки и пересобрать; для этого вам нужен исходный код, который может быть, а может и не быть :(

Связанный контент