¿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?

Author: brian d foy, 2009-05-18

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.

 48
Author: ysth,
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
 35
Author: Chas. Owens,
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