2009-06-08 7 views
5

Come posso trovare la posizione standard site_perl (non specifico per l'arco)? È sicuro passare semplicemente su @INC e trovare il percorso che termina con "site_perl" o esiste un modo standard per farlo?Come trovo la directory site_perl standard per Perl?

Il motivo per cui ho cercato di trovarlo, è che ho un progetto molto grande costituito da centinaia di singoli moduli, tutti con i propri file Makefile.PL (praticamente ogni file .pm è stato creato come proprio stile CPAN modulo). Insieme a questo, ogni modulo può avere artefatti (modelli, .cgi, ecc.), In varie posizioni, tutti che devono essere distribuiti in varie posizioni, nulla è standard. Questo è il primo passo per cercare di avere tutto sotto controllo, in pratica con un singolo Makefile in grado di trovare e distribuire tutto, il prossimo passo sarà ottenere un layout ragionevole nel controllo della versione.

Ho passato del tempo a provare a farlo con gli strumenti di installazione standard, ma non ho avuto fortuna.

+1

Perché stai cercando site_perl? Se ci dici cosa stai cercando di fare, probabilmente possiamo dirti come farlo. :) –

risposta

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 

O, come @ysth sottolinea nei commenti, è possibile utilizzare:

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

su Windows e

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

in * nix conchiglie.

1

Non è sicuro eseguire il loop su @INC in quanto può essere modificato dal codice o dall'ambiente e, pertanto, potrebbe contenere più directory che terminano in site_perl.

Se si sta tentando di determinare dove è installato un determinato modulo, utilizzare %INC.

+0

No, sto cercando di trovare dove installare un modulo specifico. Ho un alto livello di controllo sugli obiettivi di installazione, ma a questo punto non posso cambiare @INC, né a causa della complessità posso usare MakeMaker/etc. –

+0

perl -V | grep sitelib cerca il -Dsitelib = valore –

+0

@Chas. Owens: installsitelib, non sitelib – ysth

2

Basta eseguire perl -V. Alla fine verrà stampato il valore predefinito @INC.

5

C'è un motivo per non utilizzare uno dei programmi di installazione del modulo (ExtUtils::MakeMaker, Module::Build, Module::Install)?

Ma se è necessario, la directory è disponibile (dopo aver caricato Config) come $Config::Config{'installsitelib'}. Si noti che alcune piattaforme potrebbero configurare perl in modo tale che questa directory non venga visualizzata letteralmente in @INC, invece di avere un'altra directory che è collegata in modo simbolico alla directory installsitelib.

Problemi correlati