2009-07-19 3 views
4

다른 앱의 특정 모듈 버전을 확인하고 인터넷 액세스없이 설치 작업을 수행하기 위해 앱 별 미니 CPAN을 사용하는 방법이 있습니까? '표준'mini-cpan 방식은 CPAN/Config.pm에서 파일 URL로 'conf urlist'를 설정하는 것에 의존합니다.CPAN.pm에 응용 프로그램 별 미니 cpan을 사용하도록 지시하려면 어떻게합니까?

하나의 미니 cpan으로 문제가 없습니다. 그러나 각 앱마다 버전 요구 사항이 다르므로 각 앱 (로컬 앱)마다 다른 디렉토리에서 CPAN을 설치하는 작업을 자동화해야합니다.

use CPAN; 
use FindBin qw($Bin); 

my $file_url="file:///$Bin/../cpan"; 
CPAN::Shell->o(qw(conf urllist),$file_url); 

CPAN::shell(); 
+3

대신 PAR :: Packer를 사용하여 perl 앱을 패키징 할 수 있습니까? – Nifle

+0

PAR :: Packer는 동일한 운영 체제에 배포하기위한 유용한 솔루션이지만 CPAN 모듈의 로컬 복사본을 버전 관리하는 문제를 해결하지 않고 다른 운영 체제에 설치합니다 (미안합니다.). – sidler

답변

5

당신은 다른 구성 파일을로드 : $file_url 위치에서

거의 작품을 다음과 같은,하지만 단지 부분적으로 작업 쉘을 가지고 있으며, 여전히 웹에서 대신 사용하는 가져 오는 미니 - CPAN 각 애플리케이션에 대해

$ cpan -j some/app/Config.pm -i Foo::Bar 

이 최신 기능이 CPAN.pm 배포 아직 실험 이후 포함되지 않습니다 : 최신 cpan 명령은 그냥 할 수있는 -j 스위치가 있습니다. 그러나 나는 이것을 몇 달 동안 사용했는데, 내 DPAN 작업의 일부로 사용했습니다.

그 중 하나가 마음에 들지 않으면 응용 프로그램 별 CPAN::Config 모듈을 Perl이 개인 또는 사이트 전체 버전을 찾기 전에 찾아야합니다. 현재 CPAN/Config.pm을 응용 프로그램 모듈 디렉토리에 복사하고 디렉토리가 @INC (어쩌면 PERL5LIB 환경 변수를 사용)인지 확인하십시오. CPAN.pm은 먼저 그것을 찾아서 사용해야합니다. 처음 발견 한 것만 사용합니다. 구성이 수정되면 편리합니다. 모듈에서 코드를 실행할 수 있기 때문에 약간 융통성이 있습니다. 그것은 Perl 코드와 같은 구성입니다.

충분하지 않은 경우 응용 프로그램에서 CPAN::HandleConfig()을 무시하면 CPAN.pm에서 파일을로드하지 않습니다. 그런 다음 값을 직접 설정합니다. 이는 구성 값 중 일부를 파악할 응용 프로그램 논리가 많은 경우에 특히 유용합니다. CPAN.pm 구성은 %CPAN::Config 해시이므로 적절한 키에 대해 올바른 값을 설정하기 만하면됩니다.

어쨌든 "connect_to_internet_ok"구성을 잘못된 값으로 설정하고 "urllist"를 지우고 로컬 minicpans 만 제거하려고합니다.

관련 문제