2009-06-08 5 views
5

표준 site_perl (비 아치 전용) 위치는 어떻게 찾을 수 있습니까? @INC를 반복하고 "site_perl"로 끝나는 경로를 찾는 것이 안전합니까, 아니면 이렇게하는 표준 방법이 있습니까?Perl에 대한 표준 site_perl 디렉토리는 어떻게 찾습니까?

이것을 찾으려는 이유는 수백 개의 개별 모듈로 구성된 커다란 프로젝트로, 모두 자신의 Makefile.PL 파일 (모든 .pm 파일은 거의 자체 CPAN 스타일로 구축되었습니다. 기준 치수). 이와 함께 각 모듈에는 여러 위치에 여러 파일 (템플릿, .cgi 등)이있을 수 있습니다. 모든 파일은 여러 위치에 배포해야하며 표준은 없습니다. 이것은 기본적으로 모든 것을 찾아서 배포 할 수있는 단일 Makefile을 가지고 있으며, 다음 단계는 버전 제어에서 합리적인 레이아웃을 얻는 것입니다.

표준 설치 도구로이 작업을 수행하는 데 시간을 할애했지만 운이 없었습니다.

+1

왜 site_perl을 찾고 계십니까? 당신이하려는 일을 우리에게 말해 준다면, 어떻게해야하는지 알려줄 수 있습니다. :) –

답변

7
C:\Temp> perl -MConfig -e "print qq{$_ => $Config{$_}\n} for grep { /site/ } keys %Config" 

    d_sitearch => define 
    installsitearch => C:\opt\perl\site\lib 
    installsitebin => C:\opt\perl\site\bin 
    installsitehtml1dir => 
    installsitehtml3dir => 
    installsitelib => C:\opt\perl\site\lib 
    installsiteman1dir => 
    installsiteman3dir => 
    installsitescript => C:\opt\perl\site\bin 
    sitearch => C:\opt\perl\site\lib 
    sitearchexp => C:\opt\perl\site\lib 
    sitebin => C:\opt\perl\site\bin 
    sitebinexp => C:\opt\perl\site\bin 
    sitehtml1dir => 
    sitehtml1direxp => 
    sitehtml3dir => 
    sitehtml3direxp => 
    sitelib => C:\opt\perl\site\lib 
    sitelib_stem => 
    sitelibexp => C:\opt\perl\site\lib 
    siteman1dir => 
    siteman1direxp => 
    siteman3dir => 
    siteman3direxp => 
    siteprefix => C:\opt\perl\site 
    siteprefixexp => C:\opt\perl\site 
    sitescript => 
    sitescriptexp => 
    usesitecustomize => define 

또는 @ysth 댓글에서 지적으로, 당신은 사용할 수 있습니다 : * 괜찬아 껍질에 Windows에서

C:\Temp> perl -V:.*site.* 

$ perl '-V:.*site.*' 

.

1

코드 또는 환경으로 수정할 수 있으므로 @INC을 반복해도 안전하지 않으므로 site_perl로 끝나는 여러 개의 디렉터리가 포함될 수 있습니다.

주어진 모듈이 설치된 위치를 확인하려는 경우 %INC을 사용하십시오.

+0

아니, 특정 모듈을 설치할 위치를 찾으려고합니다. 설치 대상에 대한 높은 수준의 제어권을 가지고 있지만이 단계에서 @INC를 변경할 수 없으며 복잡성 때문에 MakeMaker/etc를 사용할 수 없습니다. –

+0

perl -V | grep sitelib은 -Dsitelib = 값 –

+0

@Chas를 찾습니다. Owens : sitelib이 아닌 installsitelib – ysth

2

그냥 perl -V으로 실행하십시오. 마지막에 기본값 @INC가 인쇄됩니다.

5

모듈 설치기 (ExtUtils::MakeMaker, Module::Build, Module::Install) 중 하나를 사용하지 않는 이유가 있습니까?

하지만해야한다면, 디렉토리는 Config을로드 한 후 $Config::Config{'installsitelib'}으로 사용할 수 있습니다. 일부 플랫폼에서는 perl을 구성하여이 디렉토리가 @INC에 실제로 나타나지 않고 대신 installsitelib 디렉토리로 심볼릭 링크 된 다른 디렉토리를 가질 수 있습니다.

관련 문제