ProgramaciónDesarrollador Backend

¿Cuáles son las formas de organizar e importar módulos en Perl? ¿Cómo funciona el sistema @INC y use/require? Proporcione un ejemplo de creación y conexión de su propio módulo.

Supere entrevistas con el asistente de IA Hintsage

Respuesta

Para organizar el código en Perl se utilizan módulos (packages), que se estructuran en archivos separados con la extensión .pm.

  • Para conectar un módulo se aplica use (en la etapa de compilación) y require (en la etapa de ejecución).
  • Al buscar un módulo, Perl utiliza un arreglo especial @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.

Pregunta engañosa

¿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 a import (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.

Ejemplos de errores reales por desconocer los matices del tema


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 porque require no llama a import. 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 lib o 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 de use Foo;. Perl no encontró el módulo, lo que interrumpió el funcionamiento de partes críticas de la aplicación.