2009-06-08 32 views
5

如何找到標準site_perl(非特定曲面)位置?只是循環訪問@INC並找到以「site_perl」結尾的路徑或者是否有標準方法來執行此操作是否安全?如何找到Perl的標準site_perl目錄?

試圖找到這個的原因是,我有一個非常大的項目,從數百個單獨的模塊構建而成,所有模塊都有自己的Makefile.PL文件(幾乎每個.pm文件都被構建爲它自己的CPAN風格模塊)。除此之外,每個模塊可能在各個位置都有工件(模板,.cgi等),所有這些工件都需要部署到各個位置,沒有任何標準。這是試圖控制它的第一步,基本上有一個可以找到並部署所有東西的Makefile,下一步將在版本控制中以合理的佈局獲得它。

我花了一些時間試圖用標準安裝工具來做到這一點,但沒有運氣。

+1

你爲什麼要尋找site_perl?如果你告訴我們你想要做什麼,我們可以告訴你如何去做。 :) – 2009-06-08 19:36:01

回答

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.*' 

在* nix的炮彈。

1

由於可以通過代碼或環境修改@INC,因此可能會包含多個以site_perl結尾的目錄,因此不安全。

如果您試圖確定給定模塊的安裝位置,請使用%INC

+0

不,我試圖找到安裝特定模塊的位置。我對安裝目標有很高的控制能力,但是在這個階段不能改變@INC,也不能因爲複雜性而使用MakeMaker/etc。 – 2009-06-08 13:36:38

2

只需運行perl -V。它將在最後打印默認的@INC。

5

是否有理由不使用其中一個模塊安裝程序(ExtUtils::MakeMaker,Module::Build,Module::Install)?

但是,如果您必須,目錄可用(在加載Config後)爲$Config::Config{'installsitelib'}。請注意,某些平臺可能配置perl,以便此目錄不會在字面上出現在@INC中,而是具有某些其他目錄,該目錄符號鏈接到installsitelib目錄。