Paquetes y módulos de Perl

En Perl, cada paquete tiene una tabla de símbolos separada. La sintaxis de definición es:

package mypack;

Esta declaración define un paquete llamadomypacky a partir de entonces todos los nombres de variables y subrutinas definidos se almacenan en la tabla de símbolos asociada a ese paquete, hasta que se encuentre otrapackagesentencia.

Cada tabla de símbolos tiene su propio conjunto de variables y nombres de subrutinas. Los nombres de cada grupo no están relacionados, por lo que se puede usar el mismo nombre de variable en diferentes paquetes, pero representa variables diferentes.

Para acceder a una variable de otro paquete desde un paquete, se puede especificar de la forma "nombre del paquete + dos puntos dobles (::) + nombre de la variable".

La tabla de símbolos predeterminada que almacena los nombres de variables y subrutinas está asociada con el paquete llamadomainSi se definen otros paquetes en el programa, cuando quieras volver a la tabla de símbolos predeterminada, puedes especificar de nuevo el paquete main:
package main;

De esta manera, el programa siguiente se comporta como si nunca se hubiera definido un paquete, y los nombres de variables y subrutinas se almacenan de la forma habitual.

En el siguiente ejemplo, el archivo contiene los paquetes main y Foo. La variable especial__PACKAGE__se usa para mostrar el nombre del paquete:

Ejemplo

#!/usr/bin/perl # paquete main $i = 1; print "Nombre del paquete :" , __PACKAGE__ , " $i\n"; package Foo; # paquete Foo $i = 10; print "Nombre del paquete :" , __PACKAGE__ , " $i\n"; package main; # Volver a especificar el paquete main $i = 100; print "Nombre del paquete :" , __PACKAGE__ , " $i\n"; print "Nombre del paquete:" , __PACKAGE__ , " $Foo::i\n"; 1;

Al ejecutar el programa anterior, el resultado es:

包名 : main 1
包名 : Foo 10
包名 : main 100
包名: main 10

Módulos BEGIN y END

El lenguaje Perl proporciona dos palabras clave: BEGIN y END. Pueden contener respectivamente un conjunto de scripts que se ejecutan antes o después de la ejecución del cuerpo del programa.

El formato de sintaxis es el siguiente:

BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
  • CadaBEGINmódulo se ejecuta después de que el script Perl se carga y compila, pero antes de que se ejecuten otras sentencias.

  • El bloque de sentencias se ejecuta antes de que el intérprete salga.ENDLos bloques de sentencias son especialmente útiles al crear módulos de Perl.

  • BEGINyENDSi aún no lo entiendes bien, podemos ver un ejemplo:

Ejemplo

Ejemplo

#!/usr/bin/perl package Foo; print "Este es el bloque de sentencias BEGIN\n"; BEGIN { print "Este es el bloque de sentencias END\n" } END { print "Al ejecutar el programa anterior, el resultado es:\n" } 1;

¿Qué es un módulo de Perl?

这是 BEGIN 语句块
Begin 和 Block 实例
这是 END 语句块

¿Qué es un módulo de Perl?

Un módulo de Perl es un paquete reutilizable. El nombre del módulo es el mismo que el nombre del paquete, y el sufijo del archivo de definición es

A continuación definimos un módulo Foo.pm, el código es el siguiente:.pm。

Ejemplo

Ejemplo

#!/usr/bin/perl package Foo; sub bar { print "Hello $_[0]\n" } sub blat { print "World $_[0]\n" } 1;

La función

  • cargará un módulo.requireyusees un array especial integrado en Perl que contiene las rutas de directorio que apuntan a la ubicación de las rutinas de la biblioteca.

  • @INCLa llamada a la función

  • requireyuseejecuta el código.evalAl final

  • devolver TRUE es obligatorio; de lo contrario, devuelve un error.1;Las funciones Require y Use


Las funciones Require y Use

la función, como se muestra a continuación:requireEjemplo

Ejemplo

#!/usr/bin/perl require Foo; Foo::bar( "a" ); Foo::blat( "b" );

Ejemplo

Ejemplo

#!/usr/bin/perl use Foo; bar( "a" ); blat( "b" );

1. require se utiliza para cargar módulos o programas Perl (la extensión .pm se puede omitir, pero .pl es obligatoria).

  • 2. La sentencia use de Perl se introduce en tiempo de compilación, mientras que require se introduce en tiempo de ejecución.
  • 3. use introduce el módulo y también sus submódulos. En cambio, require no puede introducirlos; hay que volver a declararlos.
  • 4. USE busca en el @INC predeterminado actual; si el módulo no está en @INC, no se puede introducir con USE, pero require puede especificar una ruta.
  • 5. Al usar USE para hacer referencia a un módulo, si el nombre del módulo contiene el doble dos puntos ::, este se utilizará como separador de rutas, equivalente a / en Unix o \ en Windows. Por ejemplo:
  • Al añadir la siguiente sentencia use, el módulo puede exportar los símbolos de la lista:
    use MyDirectory::MyModule

El array @EXPORT contiene los nombres de las variables y funciones exportadas por defecto:

require Exporter;
@ISA = qw(Exporter);

Crear un módulo de Perl

package Module;

require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(bar blat);  # 默认导出的符号

sub bar { print "Hello $_[0]\n" }
sub blat { print "World $_[0]\n" }
sub splat { print "Not $_[0]\n" }  # Not exported!

1;

Crear un módulo de Perl

Puedes escribir h2xs en el modo de línea de comandos para ver su lista de parámetros.

Formato de sintaxis de h2xs:

Descripción de parámetros:

$ h2xs -AX -n  ModuleName

Ignorar el mecanismo autoload

  • -AIgnorar elementos XS

  • -XEspecificar el nombre del módulo de extensión

  • -nPor ejemplo, si tu módulo está en

el archivo, usa el siguiente comando:Person.pmAl ejecutar el programa anterior, se mostrará:

$ h2xs -AX -n Person

En el directorio Person puedes ver los directorios y archivos recién agregados y sus descripciones:

Writing Person/lib/Person.pm
Writing Person/Makefile.PL
Writing Person/README
Writing Person/t/Person.t
Writing Person/Changes
Writing Person/MANIFEST

README: este archivo contiene información de instalación, dependencias del módulo, información de copyright, etc.

  • Changes: este archivo sirve como el archivo de registro de cambios (changelog) de tu proyecto.

  • Makefile.PL: este es el constructor estándar de Makefile de Perl. Se utiliza para crear el archivo Makefile.PL y compilar el módulo.

  • MANIFEST: este archivo se utiliza para construir automáticamente la distribución de versiones del módulo en formato tar.gz. De esta manera puedes publicar tu módulo en CPAN o distribuirlo a otras personas. Contiene la lista de todos los archivos de tu proyecto.

  • Person.pm: este es el archivo principal del módulo, que contiene tu código de manejo (handler code) de mod_perl.

  • Person.t: algunos scripts de prueba para el módulo. Por defecto solo comprueba la carga del módulo; puedes añadir nuevas unidades de prueba.

  • t/: archivos de prueba

  • lib/: directorio donde se almacena el código fuente real

  • Puedes usar el comando tar (en Linux) para empaquetar los directorios anteriores en Person.tar.gz.

Instalar módulos de Perl


Instalar módulos de Perl

proceder a descomprimir e instalarlo. Los pasos son los siguientes:Person.tar.gzPrimero ejecuta "perl Makefile.PL" para generar el Makefile en el directorio actual;

tar xvfz Person.tar.gz
cd Person
perl Makefile.PL
make
make install

Luego ejecuta "make" para compilar y crear los archivos de biblioteca necesarios;

Después usa "make test" para comprobar si el resultado de la compilación es correcto; finalmente ejecuta "make install" para instalar los archivos de biblioteca en el directorio del sistema. Con esto finaliza todo el proceso de compilación.

Otras extensiones

IA pensando...