sintaxis script programacion guia example ejemplos desde completo cero aprender perl deployment

programacion - perl script example



¿Cómo encuentro todos los módulos utilizados por un script de Perl? (3)

Module :: ScanDeps - Escanee recursivamente el código de Perl para las dependencias

Realiza escaneos estáticos y en tiempo de ejecución. Solo módulos, no conozco ninguna forma exacta de verificar qué versiones de qué distribuciones. Puede obtener paquetes antiguos de BackPan o simplemente empaquetar toda su cadena de dependencias locales con PAR .

Me estoy preparando para intentar implementar algún código en varias máquinas. Hasta donde yo sé, usar Makefile.pm para rastrear dependencias es la mejor manera de asegurar que estén instaladas en todas partes. El problema que tengo es que no estoy seguro de que nuestro Makefile.pm haya sido actualizado ya que esta aplicación ha pasado por algunos desarrolladores diferentes.

¿Hay alguna forma de analizar automáticamente mi fuente o algunas ejecuciones completas de mi programa para determinar exactamente qué versiones de qué módulos depende mi aplicación? Además de eso, ¿hay alguna manera de filtrarlo según los paquetes de CPAN ? (De modo que solo dependo de Moose en lugar de cada módulo que viene con Moose).

Una tercera pregunta relacionada es, si usted depende de una versión de un módulo que no es la última, ¿cuál es la mejor manera de que alguien más la instale? ¿Debo comenzar a incluir instalaciones de Perl localizadas completas con mi aplicación?


Para ser claros, no se puede obtener genéricamente una lista de módulos de los que depende la aplicación solo mediante el análisis de código. Por ejemplo, si sus aplicaciones eval { require $module; $module->import() } eval { require $module; $module->import() } , donde $module se pasa a través de la línea de comando, entonces esto SOLAMENTE se puede detectar al ejecutar realmente la versión de línea de comando específica con TODOS los valores del módulo.

Si desea hacer esto, puede descubrir cada módulo utilizado por una combinación de ejecuciones a través de:

  1. Devel::Cover . Los informes de cobertura incluirían el 100% de los módulos utilizados. Pero no obtienes los #s de la versión.

  2. Imprima %INC en cada punto de salida posible en el código como decía la respuesta de slu. Esto probablemente debería hacerse en el bloque END{} y en el controlador __DIE__ para cubrir todos los puntos de salida posibles, e incluso entonces puede no cubrirse completamente al 100% en caso genérico si en algún lugar dentro del programa se sobreescribe su controlador __DIE__ .

  3. Devel::Modlist (también mencionado por la respuesta de slu): la desventaja en comparación con Devel::Cover es que NO parece ser capaz de agregar una base de datos en varias muestras como Devel::Cover . En el lado positivo, está especialmente diseñado, por lo que tiene muchas opciones muy útiles (rutas CPAN, versiones).

  4. Tenga en cuenta que el otro módulo ( Module::ScanDeps ) NO parece permitirle hacer análisis en tiempo de ejecución en base a argumentos de línea de comando arbitrarios (por ejemplo, parece que a primera vista solo le permite ejecutar el programa sin argumentos) y si eso es cierto, es inferior a todos los 3 métodos anteriores para cualquier código que pueda cargar módulos dinámicamente.