경고

경고

최근 CentOS 6.3(i386)을 설치했습니다.

두 개의 Perl 바이너리가 있습니다

/usr/bin/perl (v5.10.1)
/usr/local/appx/perl/bin/perl (v5.8.8)

내 질문: 해당 appx의 시스템 전체 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.

또한 스크립트는 appx perl 바이너리 경로( )를 매핑할 configure필요가 없으며 자동으로 시스템 전체 perl을 기본값으로 선택합니다.ARG/usr/local/appx/perl/bin/perl

답변1

Perl 5 마이너 버전은 이전 버전과 호환되므로 5.8.8 모듈은 5.10.1 Perl과 함께 작동해야 합니다(그러나 예외가 있습니다. 아래 CAVEAT를 참조하세요). 포함 경로( @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를 사용하지 않는다면 걱정할 필요가 없습니다. 그렇다면 심볼릭 링크 대신 복사하여 다시 빌드해야 합니다. 이를 위해서는 소스가 필요하거나 없을 수도 있습니다. :(

관련 정보