2009-05-18 9 views

Respuesta

47

base intenté hacer demasiadas cosas — manejando automáticamente los módulos de carga pero también permitiendo establecer la herencia de las clases ya cargadas (posiblemente desde un archivo cuyo nombre no estaba basado en el nombre del módulo). Para hacer que funcione, hubo algunos hackers que causaron resultados sorprendentes en algunos casos. En lugar de romper la compatibilidad con versiones anteriores, se introdujo un nuevo pragma de reemplazo parent con una semántica más limpia.

parent será un módulo central a partir de 5.10.1.

Actualización:base olvidaron que maneja fields (si está utilizando el fields pragma), que parent no lo hacen.

+21

Además, comparar perl -wE'sayay requerir base 'perl -wE'say require parent' – ysth

34

Armado con el bit adicional de información de ysth, yo era capaz de ver las diferencias en los documentos:

El pragma base hace lo siguiente:

  • añade el paquete llamado a @ISA
  • carga el módulo con el mismo nombre que el paquete nombrado usando require (a menos que detecte que el paquete ya se ha cargado)
  • no fallará si un módulo con th e mismo nombre que el paquete no existe
  • muere si no hay símbolos en el paquete llamado
  • $VERSION si no existe en paquete llamado, base establece que "-1, set by base.pm"
  • inicializa el fields del paquete llamado si es que existen
  • no llama a la función de importación del paquete llamado

el parent pragma hace lo siguiente:

  • añade el paquete llamado a @ISA
  • carga el módulo con el mismo nombre que el paquete nombrado usando require
  • acepta una opción que dice que no a morir si un módulo con el mismo nombre que el paquete doesn' t existe
+4

Casi. La opción no requerida simplemente le dice que no haga el requerimiento (por lo que la clase ya debe estar cargada). Esto significa que no tiene que atrapar errores y decidir si deben suprimirse o no. – ysth

Cuestiones relacionadas