2013-03-21 1 views
1

모든 타사 (읽기 : CPAN) 펄 모듈을 PERFORCE 리포지토리에 설치해야하는 프로젝트에서 작업 중이므로 의존하는 코드가 수동으로 설치해야하는 다른 사람없이 성공적으로 실행됩니다. cpanminus를 사용하여 CPAN 모듈을 설치 했으므로 원하는 디렉토리에 cpanm -L . Moose을 실행했는데 모든 것이 성공적으로 설치되었습니다. 내가 무스로 만든 모듈을 컴파일 할 때, 나는 가끔이 오류를 얻을 :강제로 로컬에 설치된 종속성을 사용하도록 모듈을 강제 설치

Undefined subroutine &Carp::longmess_heavy called at /usr/lib/perl5/5.8.8/Carp.pm line 235. 

그것은 잉어가 무스와 내 로컬 디렉토리에 설치에도 불구하고, 모양을, 그것은 (오래된)를 사용하고 있습니다 버전은 /user/lib/perl5/5.8.8입니다. 내 컴퓨터에서 Carp를 업그레이드 할 수 있지만 저장소에 코드를 확인하자마자 오래된 Carps를 가진 모든 사람들이 같은 문제를 겪게됩니다. 그렇다면 무스가 /usr/lib/perl5/5.8.8에있는 잉어 대신 로컬에 설치된 잉어를 사용하도록하려면 어떻게해야합니까?

답변

0

해결책을 찾을 수있었습니다. 지저분하지만, 그것은 이미 지저분한 시스템을 가지고있는 프로젝트에 합류하기 위해 지불해야하는 가격입니다. 명시 적으로 새로운 잉어를 요구하는

무스를 포함하기 전에, 내가 가진 :이 서브 루틴을 다시 정의에 대한 경고를 많이 생성, 그래서로했다
require "[path to Carp]/Carp.pm"; 

(일시적으로)을 억제 :

my $restore_warn = $SIG{'__WARN__'}; 
$SIG{'__WARN__'} = sub {}; 
require "[path to Carp]/Carp.pm"; 
$SIG{'__WARN__'} = $restore_warn; 
5

무스를 강요하지 않으면 강제로 perl이됩니다. perl 위치에 모듈을 설치 했으므로 아무 것도 모르는 경우 perl에게 알려야합니다.

모든 스크립트에 영향을주고 싶으므로 로그인 스크립트에 배치해야합니다.

export PERL5LIB=/home/.../lib 

당신은 단지 그 하나의 프로그램에 영향을 원한다면, 당신이 사용하는 프로그램을 실행하려는 다음

PERL5LIB=/home/.../lib script 

하거나 스크립트에 다음을 추가 거라고 :

use lib '/home/.../lib'; 
+0

이것은 맞지만 매우 휴대 할 수는 없습니다. local :: lib를 사용하는 것이 좋습니다. http://search.cpan.org/dist/local-lib/lib/local/lib.pm#The_bootstrapping_technique –

+1

@misplacedme, 1) local :: lib는 단지 휴대하기 힘듭니다. (사실 로그인 스크립트에서 사용하는 것은 매우 복잡합니다.) 2) local :: lib는 INSTALL_BASE를 사용하는데, 이는 설계상의 결함이 있다고 생각합니다. – ikegami

+0

나는 고쳐졌다. 나는 이것을 다음 번에 염두에 두어야 할 것이다. –