2009-06-08 22 views
5

Standart site_perl (arşiv dışı özel) konumu nasıl bulabilirim? @INC üzerinden döngü yapmak ve "site_perl" ile biten yolu bulmak güvenli midir yoksa bunu yapmak için standart bir yol var mı?Perl için standart site_perl dizinini nasıl bulabilirim?

Bunu bulmaya çalışmamın sebebi, hepsi kendi Makefile.PL dosyalarına sahip yüzlerce tekil modülden yapılmış çok büyük bir projem var (hemen hemen her .pm dosyası kendi CPAN stili olarak oluşturulmuştur) modülü). Bununla birlikte, her modülün, çeşitli konumlara yerleştirilmesi gereken çeşitli konumlarda (şablonlar, .cgi'ler, vb.), Standartların hiçbiri standart değildir. Bunu kontrol altına almaya çalışan ilk adım, temel olarak her şeyi bulabilen ve dağıtabilen tek bir Makefile'ye sahip olmak, bir sonraki adım ise versiyon kontrolünde mantıklı bir düzende elde etmektir.

Bunu standart kurulum araçlarıyla yapmaya çalışan zaman harcadım ama şansım olmadı.

+1

Neden site_perl arıyorsunuz? Ne yapmaya çalıştığınızı söylerseniz, muhtemelen size nasıl yapacağınızı söyleyebiliriz. :) –

cevap

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 

Ya @ysth açıklamalarda işaret ettiği gibi, sen kullanabilirsiniz: * nix kabuklarda Windows üzerinde

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

ve

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

.

1

@INC üzerinden kod çevreye ya da çevreye göre değiştirilebileceğinden ve bu nedenle, site_perl ile biten çok sayıda dizin içerebileceğinden emin olmak güvenli değildir.

Belirli bir modülün nereye kurulduğunu belirlemeyi deniyorsanız %INC kullanın.

+0

Hayır, belirli bir modülü nereye kuracağımı bulmaya çalışıyorum. Kurulum hedefleri üzerinde yüksek düzeyde bir kontrole sahibim, ancak bu aşamada @INC'yi değiştiremiyorum, ne de karmaşıklıktan dolayı MakeMaker/etc'yi kullanabilirim. –

+0

perl -V | grep sitelib -Dsitelib = –

+0

@ Chas değerini arar. Owens: installsitelib değil, sitelib – ysth

2

Sadece perl -V'u çalıştırın. Sonunda varsayılan @INC yazdıracaktır.

5

Modül yükleyicilerinden birini kullanmamanın bir nedeni var mı (ExtUtils::MakeMaker, Module::Build, Module::Install)?

Ancak, gerekiyorsa, dizin (Config yüklendikten sonra) $Config::Config{'installsitelib'} olarak kullanılabilir. Bazı platformlar, installsitelib dizinine bağlanan başka bir dizin yerine, bu dizinin tam anlamıyla @INC içinde görünmeyeceği şekilde perl'u yapılandırabileceğini unutmayın.

İlgili konular