Historia de la cuestión:
En Perl, el espacio de nombres es el principal medio para aislar variables y funciones entre diferentes partes del programa. Con la directiva package, se crean áreas independientes, cada una de las cuales obtiene su propio conjunto de variables y funciones globales. Esto permite desarrollar proyectos de múltiples archivos sin conflictos de nombres.
Problema:
El uso incorrecto del alcance (scoping), la mezcla de variables léxicas y de paquete, o un manejo incorrecto del espacio de nombres "main" a menudo conduce a problemas: aparición de variables inesperadas, sobrescritura de funciones, errores no evidentes en impuestos y pruebas.
Solución:
package SomeName;.my) son visibles solo dentro del bloque, mientras que las globales (our, anteriormente use vars) son visibles en todo el paquete.AnotherPackage::some_function().Ejemplo de código:
package MyApp::Utils; our $global_var = 10; sub do_something { return $global_var + 1; } package main; print MyApp::Utils::do_something(); # 11
Características clave:
:: para acceder a recursos ajenos.main es el espacio de nombres global estándar por defecto para scripts.¿Cuál es la diferencia entre my, our y local en paquetes?
my — siempre solo en el bloque léxico actual.our — declara una variable global de paquete, pero la hace accesible como una referencia léxica en el bloque.local — redefine temporalmente el valor global de una variable de paquete durante la existencia del bloque.¿Se puede llamar a una función sin indicar explícitamente el paquete?
Sí, si la función se exporta al paquete actual mediante el módulo Exporter y use, de lo contrario, solo a través del nombre completo.
¿Se pueden declarar varios packages en un archivo?
Sí, pero es difícil de entender: después de cada package, todas las declaraciones posteriores pertenecen al nuevo espacio de nombres. Es mejor utilizar archivos separados para cada paquete.
En un script de equipo se utilizaban varios packages de manera consecutiva dentro de un solo archivo; las variables se confundían, a veces léxicas, a veces globales.
Pros:
Contras:
Cada package se trasladó a su propio módulo separado, las funciones se exportaron explícitamente.
Pros:
Contras: