Cada paquete en Perl tiene una tabla de símbolos separada y la sintaxis de definición es:
empaquetar mi paquete;
Esta declaración define un paquete llamado mypack . Los nombres de todas las variables y subrutinas definidas a partir de entonces se almacenan en la tabla de símbolos asociada con el paquete hasta que se encuentre otra declaración de paquete .
Cada tabla de símbolos tiene su propio conjunto de nombres de variables y subrutinas. Cada conjunto de nombres no está relacionado, por lo que el mismo nombre de variable se puede utilizar en diferentes paquetes para representar diferentes variables.
Para acceder a las variables de otro paquete desde un paquete, puede especificarlo mediante "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 denominado main . Si se definen otros paquetes en el programa y desea volver a utilizar la tabla de símbolos predeterminada, puede volver a especificar el paquete principal:paquete principal;
De esta forma el siguiente programa actuará como si el paquete nunca hubiera sido definido, y los nombres de las variables y subrutinas se almacenarán como de costumbre.
Los archivos del siguiente ejemplo son paquetes main y Foo. La variable especial __PACKAGE__ se utiliza para generar el nombre del paquete:
Al ejecutar el programa anterior, el resultado de salida es:
Nombre del paquete: principal 1 Nombre del paquete: Foo 10 Nombre del paquete: principal 100 Nombre del paquete: principal 10
El lenguaje Perl proporciona dos palabras clave: BEGIN y END. Cada uno de ellos puede contener un conjunto de scripts para su ejecución antes o después de ejecutar el cuerpo del programa.
El formato de sintaxis es el siguiente:
COMIENZO { ... }FIN { ... }COMIENZO { ... }FIN { ... }
Cada módulo BEGIN se ejecuta después de cargar y compilar el script Perl, pero antes de ejecutar otras instrucciones.
Cada bloque de instrucción END se ejecuta antes de que salga el intérprete.
Los bloques de instrucciones BEGIN y END son particularmente útiles al crear módulos Perl.
Si aún no lo entiendes, podemos ver un ejemplo:
Al ejecutar el programa anterior, el resultado de salida es:
Este es el bloque de declaración BEGIN. Instancias de inicio y bloqueo. Este es el bloque de declaración END.
En Perl5, los paquetes Perl se utilizan para crear módulos.
Un módulo Perl es un paquete reutilizable. El nombre del módulo es el mismo que el nombre del paquete y el sufijo del archivo definido es .pm .
A continuación definimos un módulo Foo.pm, el código es el siguiente:
Hay algunas cosas a tener en cuenta sobre los módulos en Perl:
Las funciones requeridas y utilizadas cargarán un módulo.
@INC es una matriz especial integrada en Perl que contiene la ruta del directorio a la ubicación de las rutinas de la biblioteca.
Las funciones require y use llaman a la función eval para ejecutar código.
1 al final; la ejecución devuelve VERDADERO, lo cual es obligatorio; de lo contrario, se devuelve un error.
Los módulos se pueden llamar a través de la función require , como se muestra a continuación:
También se puede hacer referencia a él mediante la función de uso:
Notamos que la referencia requerida necesita usar el nombre del paquete para especificar la función, pero la referencia de uso no. La principal diferencia entre los dos es:
1. require se utiliza para cargar un módulo o un programa perl (se puede omitir el sufijo .pm, pero debe estar presente .pl)
2. La declaración de uso de Perl se introduce en el momento de la compilación y el requisito se introduce en el tiempo de ejecución.
3. Cuando el uso de Perl introduce un módulo, también introduce el submódulo del módulo. Sin embargo, no se puede introducir require y se debe volver a declarar.
4. USE se busca en el @INC predeterminado actual. Una vez que el módulo no está en @INC, no se puede introducir usando USE, pero require puede especificar la ruta.
5. Cuando USE se refiere a un módulo, si el nombre del módulo contiene :: dos puntos dobles, los dos puntos dobles se utilizarán como separador de ruta, lo que equivale a / en Unix o en Windows. como:
utilizar MiDirectorio::MiMódulo
Los símbolos de lista se pueden exportar desde el módulo de uso agregando la siguiente declaración:
requiere Exportador;@ISA = qw(Exportador);
La matriz @EXPORT contiene los nombres de las variables y funciones exportadas de forma predeterminada:
paquete Módulo;requiere Exportador;@ISA = qw(Exportador);@EXPORT = qw(barra blat); #Subbarra de símbolos exportados por defecto { print "Hola $_[0]n" }sub blat { print "Mundo $ _ [0]n" }sub splat { print "No $_[0]n" } # ¡No exportado!1;
Es fácil crear un módulo Perl a través de la herramienta h2xs que viene con la distribución Perl.
Puede escribir h2xs en modo de línea de comando para ver su lista de parámetros.
Formato de sintaxis h2xs:
$ h2xs -AX -n Nombre del módulo
Descripción del parámetro:
-A ignora el mecanismo de carga automática.
-X ignora los elementos XS
-n especifica el nombre del módulo de extensión
Por ejemplo, si su módulo está en el archivo Person.pm , use el siguiente comando:
$ h2xs -AX -n Persona
La ejecución del programa anterior generará:
Persona que escribe/lib/Person.pmPersona que escribe/Makefile.PLPersona que escribe/READMEPersona que escribe/t/Person.tPersona que escribe/CambiosPersona que escribe/MANIFEST
En el directorio Persona, puede ver los directorios y descripciones de archivos recién agregados:
README: este archivo contiene información de instalación, dependencias de módulos, información de derechos de autor, etc.
Cambios: este archivo sirve como archivo de registro de cambios para su proyecto.
Makefile.PL: este es el constructor estándar de Perl Makefile. Se utiliza para crear un archivo Makefile.PL para compilar el módulo.
MANIFEST: Este archivo se utiliza para crear automáticamente la distribución de la versión del módulo de tipo tar.gz. De esta manera, puedes llevar tu módulo a CPAN y publicarlo o distribuirlo a otros. Contiene una lista de todos los archivos que tiene en este proyecto.
Person.pm: este es el archivo del módulo principal que contiene el código del controlador mod_perl.
Person.t: algunos scripts de prueba para este módulo. De forma predeterminada, solo verifica la carga del módulo; puede agregar algunas unidades de prueba nuevas.
t/: archivo de prueba
lib/: directorio donde se almacena el código fuente real
Puede utilizar el comando tar (en Linux) para empaquetar el directorio anterior en Person.tar.gz.
Podemos descomprimir e instalar el archivo Person.tar.gz que acabamos de comprimir. Los pasos son los siguientes:
tar xvfz Person.tar.gzcd Personperl Makefile.PLmakemake instalar
Primero ejecute "perl Makefile.PL" para generar el Makefile en el directorio actual;
Luego ejecute "make" para compilar y crear los archivos de biblioteca necesarios;
Luego use "make test" para probar si el resultado de la compilación es correcto; finalmente ejecute "make install" para instalar el archivo de la biblioteca en el directorio del sistema y finalizará todo el proceso de compilación.