2010-07-12 14 views
5

Soy muy nuevo en la programación de Perl. Acabo de terminar de leer el libro de Llama. Hasta ahora he escrito guiones en Bash, pero quiero probar Perl y sus beneficios sobre los scripts de Bash.Perl Programming and Distribution

estoy creando una secuencia de comandos que utiliza una serie de módulos estándar (por ejemplo Getopt) y algunos módulos no tan estándar (por ejemplo PerlMagick)

En algún momento Quiero distribuir el código Perl y quiero es útil para personas que realmente no conocen Perl o la programación. Obviamente, los módulos estándar siempre deberían estar allí (estoy usando "use 5.010" para garantizar esto en cierta medida), pero ¿qué hay de los no estándar?

Supongo que hay dos posibilidades: 1) ¿Debo decirle al usuario final que instale los módulos que faltan? 2) ¿Debo crear un script de instalación que pruebe los módulos y si no están allí, entonces instálelos? Si se elige la opción 2, ¿debo descargar los módulos e instalarlos? ¿O distribuirlos con mi código principal? No estoy seguro de lo que simplemente la etiqueta es con este tipo de cosas ...

muchas gracias por todos los consejos, Ben

Respuesta

5

Si el diseño de su aplicación como una distribución de Perl (tal como se utiliza en CPAN), entonces obtienes el poder de la cadena de herramientas de Perl para tratar este tipo de cosas por ti. Simplemente asegúrese de que los módulos de los que depende estén listados correctamente en su Makefile.PL, y luego alguien solo tiene que escribir cpan YourApp::Name para obtener su aplicación y todo lo que necesita. O si descargaron su aplicación de otro lugar que no fuera CPAN y la están compilando manualmente, el proceso make puede encontrar las dependencias para ellos (razón por la cual Module::AutoInstall no está completamente muerto y no merece ser IMO).

Para usuarios de Windows, lo único que debe agregar antes del paso cpan YourApp::Name es "instalar Strawberry Perl".

También tiene la opción de empaquetar (ya sea que involucre PAR o simplemente un instalador o archivo que incluye su aplicación y todos los módulos necesarios, y probablemente perl mismo) pero hay una desventaja importante de esa técnica: significa tampoco puede usar ningún código XS, o bien debe proporcionar un paquete separado para cada plataforma diferente que desea que admita su aplicación. La ruta CPAN no se encuentra con ese problema.

1

Y si no quiere compilar con prelcc o PerlApp - entonces cualquier posibilidad funciona.

  • Usted sould comprueba la versión correcta del módulo de presentes, por su código Perl no reclamar algún mensaje de error como: "No se puede encontrar datos/UUID.pm en @INC (@INC contiene : ...) ". Por ejemplo:

    eval { use Data::UUID; }; 
    if([email protected]) { 
         print "Data::UUID not found\n"; 
    } 
    

    o

    eval { use Text::ParseWords 3.23; }; 
    if([email protected]) { 
         print "Text::ParseWords 3.23 not found\n"; 
    } 
    
  • puede probar a usar el módulo CPAN (o programa CPAN en UNIX). Al igual, puede tratar de comandos shell:

    cpan Data::UUID 
    

    o desde el perl-script:

    #!/usr/bin/perl 
    use CPAN; 
    CPAN::install("Data::UUID"); 
    
+0

Voto descendente: Esto no funciona porque 'use' se ejecuta en tiempo de compilación. Además, ya tenemos una cadena de herramientas de seguimiento de seguimiento + instalación perfectamente fina como describe la respuesta de hobbs, sin necesidad de esta piratería. – daxim