Para organizar el código en Perl se utilizan módulos (packages), que se estructuran en archivos separados con la extensión .pm.
use (en la etapa de compilación) y require (en la etapa de ejecución).@INC — esta es una lista de directorios donde Perl busca módulos.Ejemplo de módulo:
Foo.pm
package Foo; use strict; use warnings; sub say_hello { print "¡Hola desde Foo! "; } 1;
Conexión y uso:
use lib '.'; # Agrega la carpeta actual a @INC use Foo; Foo::say_hello(); # Muestra: ¡Hola desde Foo!
Principales diferencias:
use importa el módulo al inicio de la ejecución del script y llama automáticamente al método import, si lo hay.require carga el módulo solo en la primera llamada.¿Cuál es la diferencia entre use y require? ¿Cuándo usar cada operador?
Respuesta:
use— actúa en la etapa de compilación, llama automáticamente aimport(se utiliza comúnmente para módulos).require— actúa durante la ejecución, se necesita cuando el nombre del módulo no se conoce hasta la ejecución o no siempre se debe conectar.
Historia
En un proyecto grande, se conectó nuestra propia biblioteca a través de
require, olvidando que utiliza funciones exportadas. La función utilizada no fue exportada porquerequireno llama aimport. Resultado: no se realiza la importación de símbolos, hay que llamar a las funciones explícitamente.
Historia
Al trasladar el módulo a una carpeta separada, se olvidó agregar la ruta a la carpeta a través de
use libo cambiar la variable@INC. El módulo no se encontraba, el script terminó con un error, a pesar de que el archivo estaba en la ubicación correcta en relación al proyecto.
Historia
En una aplicación antigua se nombró el módulo con minúscula, pero se conectó con mayúscula:
use foo;en lugar deuse Foo;. Perl no encontró el módulo, lo que interrumpió el funcionamiento de partes críticas de la aplicación.