2009-06-08 9 views
5

¿Cómo puedo encontrar la ubicación site_perl estándar (no específica del arco)? ¿Es seguro simplemente pasar por encima de @INC y encontrar la ruta que termina con "site_perl", o existe una forma estándar de hacerlo?¿Cómo puedo encontrar el directorio site_perl estándar para Perl?

La razón para tratar de encontrar esto es que tengo un proyecto muy grande creado a partir de cientos de módulos individuales, todos con sus propios archivos Makefile.PL (casi todos los archivos .pm se han creado como su propio estilo CPAN módulo). Junto con esto, cada módulo puede tener artefactos (plantillas, .cgi, etc.) en varias ubicaciones, todas las cuales deben implementarse en varias ubicaciones, nada es estándar. Este es el primer paso para tratar de tener esto bajo control, básicamente con un solo Makefile que puede encontrar e implementar todo, el siguiente paso será obtener un diseño sensato en el control de la versión.

He pasado mucho tiempo tratando de hacer esto con las herramientas de instalación estándar, pero no he tenido suerte.

+1

¿Por qué estás buscando site_perl? Si nos dice lo que está tratando de hacer, probablemente podamos decirle cómo hacerlo. :) –

Respuesta

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, como @ysth señala en los comentarios, puede utilizar:

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

en Windows y

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

en * nix conchas.

1

no es seguro para bucle sobre @INC ya que puede ser modificado por código o el medio ambiente, y, por lo tanto, puede contener varios directorios que terminan en site_perl.

Si está tratando de determinar dónde está instalado un módulo determinado, use %INC.

+0

No, estoy tratando de encontrar dónde instalar un módulo específico. Tengo un alto nivel de control sobre los objetivos de instalación, pero en este momento no puedo cambiar @INC, ni debido a la complejidad puedo usar MakeMaker/etc. –

+0

perl -V | grep sitelib busca el -Dsitelib = valor –

+0

@Chas. Owens: installsitelib, no sitelib – ysth

2

Simplemente ejecuta perl -V. Imprimirá el @INC predeterminado al final.

5

¿Hay alguna razón para no utilizar uno de los instaladores de módulos (ExtUtils::MakeMaker, Module::Build, Module::Install)?

Pero si debe, el directorio está disponible (después de cargar Config) como $Config::Config{'installsitelib'}. Tenga en cuenta que algunas plataformas pueden configurar perl de modo que este directorio no aparezca literalmente en @INC, sino que tenga algún otro directorio que esté vinculado simbólicamente al directorio installsitelib.

Cuestiones relacionadas