Tengo varios módulos CPAN que hacen un uso extensivo de la metaprogramación para reducir la placa de la caldera y facilitar la refactorización.¿Cómo decirle a CPAN (Perl) sobre los paquetes creados con meta-programación?
La consecuencia de esto sin embargo es que hay muchos paquetes que se crean programáticamente, por lo tanto nunca hay una línea package X::Y::Z;
en el código fuente para encontrar CPAN (y luego usar para agregar el espacio de nombres a su lista de espacios de nombres reservados).
Así que mi pregunta es si hay una forma preferida de dejar que CPAN sepa sobre estos paquetes creados en tiempo de ejecución. Estas son las opciones que estoy considerando actualmente:
- buscar manualmente todos los paquetes y crear un archivo ficticio
pm
de CPAN para indexar. - Busque manualmente y luego actualice Build.PL para incluirlos en la lista
provides
. - Añadir algo de código para las rutinas de los meta-programación para realizar un seguimiento de los cuales se utilizan paquetes, y añadir un gancho en al
build dist
para actualizar elprovides
o alguna otra sección delMETA.yaml
La última opción es actualmente lo Me estoy inclinando hacia. Me gustaría saber si hay algún problema con este enfoque, o alguna forma mejor de mantener actualizado CPAN con la lista completa de paquetes.
Al menos en el caso de mi peor delincuente 'List :: Gen', ninguno de los paquetes creados en tiempo de ejecución contiene funciones que un usuario final debería llamar directamente. Por lo tanto, no tiene sentido proporcionarles la documentación del usuario final. Sé que no es necesario declarar todos los nombres de los paquetes, pero calculé que permitir que PAUSE los conozca es la "mejor" práctica. –
Todo lo que PAUSE se preocupa es que los archivos apropiados (META.yml/.json, MANIFEST, etc.) estén presentes y formateados correctamente. Una vez que tiene un espacio de nombre, lo que hace en él es su preocupación y no a otros a menos que tengan permiso en su espacio de nombre para contribuir. Mientras explique en su documentación que los espacios de nombres se generan automágicamente, ha cumplido con su parte. – squeeks
=> ¿estás seguro de eso? Según la publicación de blog de brian d foy (http://www.effectiveperlprogramming.com/blog/884): cuando PAUSE le asigna un espacio de nombres como mantenedor primario, usted solo "posee" exactamente ese espacio de nombres. Aunque los espacios de nombres Perl parecen jerárquicos, no lo son. Es decir, no hay nada en Perl que se preocupe por el espacio de nombre que usa o de cuál hereda su paquete. El XML :: Simple namespaces no hereda de XML en virtud de su nombre. De la misma manera, no tiene ningún permiso en Foo :: Bar :: Baz simplemente porque PAUSE le asignó permisos en Foo :: Bar. –