2009-07-23 21 views
5

que me ayudaría a entender qué módulo tengo si he entendido módulos razones termina en los diversos directorios bajo @INC¿Para qué se utilizan los diferentes directorios en @INC?

Bajo ActiveState en las ventanas es bastante claro

C:/Perl/lib 
C:/Perl/site/lib 

El primero es el núcleo de Perl mientras que el segundo material es un material que he instalado a través de PPM (¿tengo ese derecho?)

Sin embargo en Debian parece mucho más compicated

/etc/perl 
/usr/local/lib/perl/5.8.4 
/usr/local/share/perl/5.8.4 
/usr/lib/perl5 
/usr/share/perl5 
/usr/lib/perl/5.8 
/usr/share/perl/5.8 
/usr/local/lib/site_perl 

¿Cuál es la razón de tantos directorios y qué va donde?

Respuesta

4

Sobre la base de los archivos de estos directorios, y mi conocimiento de Perl, yo diría que se descomponen así:

  • /etc/perl - Algunos módulos Perl escriban los archivos de configuración. Dos ejemplos de estos son CPAN y los módulos en la distribución libnet. Las máquinas basadas en Debian almacenan estos archivos de configuración aquí.
  • /usr/local/lib/perl/5.8.4 - Aquí es donde van los archivos específicos de plataforma instalados fuera del sistema de paquete.
  • /usr/local/share/perl/5.8.4 - Aquí es donde van los archivos independientes de la plataforma instalados fuera del sistema de paquete.
  • /usr/lib/perl5 - Aquí es donde van los archivos específicos de plataforma instalados por el sistema de paquete.
  • /usr/share/perl5 - Aquí es donde van los archivos independientes de la plataforma instalados por el sistema de paquete.
  • /usr/lib/perl/5.8 - Estos son los archivos específicos de la plataforma que forman parte del núcleo
  • /usr/share/perl/5.8 - Estos son los archivos independientes de la plataforma que forman parte del núcleo
  • /usr/local/lib/site_perl - Aquí es donde se puede instalar sus propios módulos (si no tienen instaladores de estilo CPAN, que realmente deberían).
+0

Esto es para Debian. No es una cosa de Perl. –

+0

@brian d foy ¿Por qué exactamente sintió la necesidad de decir eso cuando la pregunta es específicamente sobre el paquete Debian Perl y menciona que la versión de ActiveState es diferente? Esto es obviamente solo de Debian. Incluso mi respuesta menciona a Debian. –

+0

Usted menciona a Debian, pero no es obvio que solo sea debian en lugar de una cosa de Windows versus Linux. De hecho, las buenas respuestas no dan por supuesto que algo sea obvio :) –

1

Creo que esto se debe a que hay muchas maneras en que puede instalar un módulo: cpan, tar.gz, paquete de deb, y todas intentan no meterse con las pertenencias de otro tipo.

Al buscar el módulo,% INC es muy útil. Almacena nombres de todos los módulos y ubicaciones, desde donde se cargan.

Por ejemplo, la ejecución de este:

perl -MDBI -e 'print join "\n", map { $_ . " = " . $INC{$_} } keys %INC' 

me da:

XSLoader.pm = /usr/lib/perl/5.10/XSLoader.pm 
warnings/register.pm = /usr/share/perl/5.10/warnings/register.pm 
Carp.pm = /usr/share/perl/5.10/Carp.pm 
Scalar/Util.pm = /usr/lib/perl/5.10/Scalar/Util.pm 
Exporter/Heavy.pm = /usr/share/perl/5.10/Exporter/Heavy.pm 
vars.pm = /usr/share/perl/5.10/vars.pm 
strict.pm = /usr/share/perl/5.10/strict.pm 
Exporter.pm = /usr/share/perl/5.10/Exporter.pm 
List/Util.pm = /usr/lib/perl/5.10/List/Util.pm 
warnings.pm = /usr/share/perl/5.10/warnings.pm 
DBI.pm = /usr/lib/perl5/DBI.pm 
AutoLoader.pm = /usr/share/perl/5.10/AutoLoader.pm 
Config.pm = /usr/lib/perl/5.10/Config.pm 
DynaLoader.pm = /usr/lib/perl/5.10/DynaLoader.pm 

Esto es útil especialmente cuando el módulo está instalado varias veces en diferentes lugares.

7

Consulte Debian's Perl Policy on paths para la justificación y el uso de todos excepto el primero y el último de los mismos. Supongo que el /etc/perl sería para módulos que contienen solo datos de configuración y el /usr/local/lib/site_perl para compartir módulos que no dependen de la arquitectura y que no dependen de la versión con un Perl no empaquetado con Debian.

4

A Perl realmente no le importa, y cómo lo hace Debian se basa en su propia manera especial de hacer todo. Depende realmente de la persona que configura e instala Perl. Por ejemplo, puedo mantener todas las cosas para todos mis perlas en virtud de sus propios directorios ya que tengo tantos instalado:

/usr/local/perls/perl-5.10.0/lib/perl5/darwin-2level 
/usr/local/perls/perl-5.10.0/lib/perl5 
/usr/local/perls/perl-5.10.0/lib/5.10.0/darwin-2level 
/usr/local/perls/perl-5.10.0/lib/5.10.0 
/usr/local/perls/perl-5.10.0/lib/site_perl/5.10.0/darwin-2level 
/usr/local/perls/perl-5.10.0/lib/site_perl/5.10.0 
. 

El Perl construir sistemas reconocen potencialmente tres tipos de directorios de instalación que se puede leer en ExtUtils::MakeMaker o Module::Build:

  • núcleo - para la materia que venía con Perl
  • sitio - el material del usuario local instala
  • proveedor - el material del proveedor del sistema operativo se instala para usted o r a través de su sistema de paquete

En general, no tiene que preocuparse por esto si está instalando sus propias cosas con las herramientas de CPAN, ya que pondrán cosas en los directorios del sitio para usted. Sin embargo, algunas distribuciones de módulos de Perl pueden interferir con la configuración del sistema de compilación para instalar en los directorios centrales o de proveedores.

Debian tiene su own policy que creo que es un poco complicado, pero funciona para ellos.

El sistema de ActiveState está realmente configurado para ser una solución principalmente administrada por ActiveState para que pueda instalar todo a través de PPM. En su mayoría están preocupados por las instalaciones empresariales estables y probadas donde manejan la mayoría de las cosas por usted. Si quiere hacer todo usted mismo, usa Strawberry Perl, que también tiene un diseño de directorio de módulos simple.

No utilizar Perl de Apple para mi propio material, pero tienen una puesta a punto muy torpe:

/System/Library/Perl/5.8.8/darwin-thread-multi-2level 
/System/Library/Perl/5.8.8 
/Library/Perl/5.8.8/darwin-thread-multi-2level 
/Library/Perl/5.8.8 
/Library/Perl 
/Network/Library/Perl/5.8.8/darwin-thread-multi-2level 
/Network/Library/Perl/5.8.8 
/Network/Library/Perl 
/System/Library/Perl/Extras/5.8.8/darwin-thread-multi-2level 
/System/Library/Perl/Extras/5.8.8 
/Library/Perl/5.8.6 
/Library/Perl/5.8.1 
Cuestiones relacionadas