En Perl, hay dos operadores principales para incluir módulos: use y require.
use — Incluye el módulo en el tiempo de compilación. Se ejecuta inmediatamente al leer el archivo Perl, carga el módulo en el ámbito y llama al método import (si está presente).
require — Carga el módulo en tiempo de ejecución (run-time).
require $some_module;).Ejemplo:
use MyModule; # tiempo de compilación; llama a import require 'MyModule.pm'; # tiempo de ejecución; sin import
¿Se puede usar
usecon un nombre de módulo variable, por ejemplo,use $module_name;?
Respuesta: No. El operador use requiere un nombre de módulo conocido estáticamente en el tiempo de compilación, mientras que require es adecuado para nombres de variables.
Ejemplo:
my $module = 'Some::Plugin'; require $module; $module->import();
Historia
El proyecto fue escrito con una gran cantidad de plugins que se cargan dinámicamente. Uno de los desarrolladores usó incorrectamente 'use $plugin', lo que causó un error de compilación. Más tarde se descubrió que la carga solo era posible a través de require, y solo luego llamar a import.
Historia
En un gran servicio de Perl, parte de las bibliotecas se cargaban a través de 'require', sin llamar a import. Las variables y funciones en las que se confiaba no fueron importadas al espacio de nombres, y el código comenzó a terminar con errores de subrutina indefinida.
Historia
Un desarrollador intentó incluir un gran bloque de código dentro de una función a través de 'use', esperando que el módulo se cargara solo cuando fuera necesario, pero en la práctica, el módulo se cargó al inicio, lo que llevó a un gasto innecesario de memoria.