sintaxis - perl pdf
¿Cómo verificar si un script Perl no tiene ningún error de compilación? (4)
Estoy llamando a muchos scripts Perl en mi script Bash (a veces también desde csh).
Al comienzo del script de Bash, quiero poner una prueba que verifique si todos los scripts de Perl carecen de errores de compilación.
Una forma de hacerlo sería llamar realmente al script Perl del script Bash y al grep
para "error de compilación" en el archivo de registro canalizado, pero esto se vuelve complicado ya que se invocan diferentes scripts Perl en diferentes puntos del código, por lo que quiero para hacer esto al comienzo del script Bash.
¿Hay alguna forma de comprobar si el script de Perl no tiene ningún error de compilación?
Además de perl -c program.pl
, también es mejor buscar advertencias con el comando:
perl -w program.pl
Para detalles, ver: http://www.perl.com/pub/2004/08/09/commandline.html
Cuando necesite verificar los errores / advertencias antes de ejecutar, pero su archivo depende de varios otros archivos, puede agregar la opción -I :
perl -I /path/to/dependency/lib -c /path/to/file/to/check
Editar : del hombre perlrun
Los directorios especificados por -I se anteponen a la ruta de búsqueda de módulos (@INC).
Uso la siguiente part de un func bash para proyectos de perl más grandes:
# foreach perl app in the src/perl dir
while read -r dir ; do
echo -e "/n"
echo "start compiling $dir ..." ;
cd $product_instance_dir/src/perl/$dir ;
# run the autoloader utility
find . -name ''*.pm'' -exec perl -MAutoSplit -e ''autosplit($ARGV[0], $ARGV[1], 0, 1, 1)'' {} /;
# foreach perl file check the syntax by setting the correct INC dirs
while read -r file ; do
perl -MCarp::Always -I `pwd` -I `pwd`/lib -wc "$file"
# run the perltidy inline
# perltidy -b "$file"
# sleep 3
ret=$? ;
test $ret -ne 0 && break 2 ;
done < <(find "." -type f /( -name "*.pl" -or -name "*.pm" /))
test $ret -ne 0 && break ;
echo "stop compiling $dir ..." ;
echo -e "/n/n"
cd $product_instance_dir ;
done < <(ls -1 "src/perl")
¡¡Tener cuidado!!
Usar el siguiente comando para verificar los errores de compilación en su programa Perl puede ser peligroso.
$ perl -c yourperlprogram
Randal ha escrito un artículo muy bueno sobre este tema, que debes consultar
- Comprobación de la integridad de su código Perl (Linux Magazine Column 91, mar 2007)
Citando de su artículo:
Probablemente lo más simple que podemos decir es "¿es válido?". Para esto, invocamos Perl, pasando el interruptor de solo compilación:
perl -c ourprogram
Para esta operación, perl compila el programa, pero se detiene justo antes de la fase de ejecución. Esto significa que cada parte del texto del programa se traduce a la estructura de datos interna que representa el programa de trabajo, pero en realidad no hemos ejecutado ningún código. Si hay algún error de sintaxis, se nos informa y la compilación aborta.
En realidad, eso es un poco mentira. Gracias a los bloques BEGIN (incluido su primo en capas, la directiva de uso), es posible que se haya ejecutado algún código Perl durante esta "comprobación de sintaxis" teóricamente segura. Por ejemplo, si su código contiene:
BEGIN { warn "Hello, world!/n" }
¡entonces verás ese mensaje, incluso durante perl -c! Esto es algo sorprendente para las personas que consideran que "solo compilar" significa "no ejecuta código". Considere el código que contiene:
BEGIN { system "rm", "-rf", "/" }
y verá el problema con ese argumento. Oops.