最近、CentOS 6.3 (i386) をインストールしました。
2つのPerlバイナリがあります
/usr/bin/perl (v5.10.1)
/usr/local/appx/perl/bin/perl (v5.8.8)
質問: システム全体の perl とその appx の 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
。
また、スクリプトは appx perl バイナリ パス ( ) をマップする必要configure
はなく、システム全体の perl をデフォルトとして自動的に選択します。ARG
/usr/local/appx/perl/bin/perl
答え1
Perl 5 のマイナー バージョンは下位互換性があるため、5.8.8 モジュールは 5.10.1 Perl でも動作するはずです (ただし例外があります。以下の警告を参照してください)。インクルード パス ( @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 を使用していない場合は心配する必要はありません。使用している場合は、シンボリックリンクではなくコピーして再構築する必要があります。そのためにはソースが必要ですが、そこにあるかどうかはわかりません :(