¿Cuál es la diferencia entre padre y base en Perl 5?
Parece haber un nuevo pragma llamado parent
eso hace más o menos lo mismo que base
. ¿Qué hace parent
que justifica un nuevo módulo (no básico)? Me estoy perdiendo algo?
2 answers
base
intentó hacer demasiadas cosas: manejar automáticamente los módulos de carga, pero también permitir establecer la herencia de las clases ya cargadas (posiblemente de un archivo cuyo nombre no estaba basado en el nombre del módulo). Para hacer que funcionara, hubo algo de hacker que causó resultados sorprendentes en algunos casos. En lugar de romper la compatibilidad hacia atrás, se introdujo un nuevo pragma parent
de reemplazo con una semántica más limpia.
parent
será un módulo básico a partir de 5.10.1.
Actualización: olvidó que base
maneja fields
(si está utilizando el fields
pragma), lo cual parent
no hace.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-18 16:22:26
Armado con la información extra de ysth, pude ver las diferencias en los documentos:
La base
pragma hace las siguientes cosas:
- añade el paquete nombrado a
@ISA
- carga el módulo con el mismo nombre que el paquete nombrado usando
require
(a menos que detecte que el paquete ya ha sido cargado) - no fallará si un módulo con el mismo nombre que el paquete no existe
- muere si no hay símbolos en el paquete nombrado
- si
$VERSION
no existe en el paquete nombrado, base lo establece en"-1, set by base.pm"
- inicializa el
fields
del paquete nombrado si existen - no llama a la función de importación del paquete nombrado
La parent
pragma hace las siguientes cosas:
- añade el paquete nombrado a
@ISA
- carga el módulo con el mismo nombre que el paquete nombrado usando
require
- acepta una opción que le dice que no muera si un módulo con el mismo nombre que el paquete no existe
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-18 13:43:47