Tutorial de PERL en castellano : Purgando los pecados.

Pero ya puestos...
Preguntas frecuentemente preguntadas
Bibliografía.
Recursos Internet
Recordando, que es gerundio

Usando el depurador

No es precisamente lo que tenía en mente nuestro político cuando decidió ver como aumentaba su capital con cada aportación de su clientela; o sea, que hacer un programilla en PERL para calcular sumas parciales, y sumas totales, no estaría mal; quizás incluso podía añadirle que sonara una campanita cada vez que sume cien talegos más. Así pues, hace el programa purga.pl, para aplicarlo sobre el fichero clientes.mas

while(<>) {
    split(/ /);
    print "Total parcial ", $total+=$_[1], ",\n";
}

que divide cada línea en sus componentes separados por espacios, y suma el segundo componente, índice 1 de la matriz. Pero cual no sería su desagradable sorpresa al ver que el dinero no aumentaba, sino que daba este resultado:

C:\PROGS\PERL>purga.pl clientes.mas
perl purga.pl clientes.mas
Total parcial 150000,
Total parcial 474999.75,
Total parcial 598454.75,
Total parcial 1154120.75,
Total parcial 1699441.75,
Total parcial 1699441.75,
Total parcial 1699441.75,

¡Diablos! 3 clientes no habían aportado su granito de arena a la grandeza del partido. ¿Cómo podía ser eso? Por mucho que lo ejecutaba no funcionaba de otra manera (como es natural), así que tuvo que aprender a manejar algo llamado purgante o purgador o algo así. Para ejecutarlo, hay que añadir la opción -d en la línea de comandos al llamar al PERL o la primera línea del script en UNIX:

perl -d purga.pl clientes.mas
Loading DB routines from perl5db.pl patch level 0.95
Emacs support available.
Enter h or `h h' for help.
main::(purga.pl:1): while(<>) {
DB<1> 

Este es el depurador o debugger de PERL, con el cual se puede hacer lo habitual en cualquier depurador, aunque quizás de una forma un poco menos amistosa Supuestamente, se puede usar desde emacs, aunque yo no he visto ninguna ventaja en ello. Sin embargo, desde xemacs es mucho más fácil de usar; se accede directamente desde la opción Perl->Debugger del menú.. También se puede usar el ActivePerl Development Kit, de ActiveState, pero todavía no lo he usado tampoco . Por ejemplo, se pueden poner puntos de ruptura con b (breakpoint), para examinar qué es lo que va mal:


DB<1> b 3

Al ejecutar el programa con c (continuar) o r (ejecutar), el programa parará en esa línea:

 
DB<2> r
main::(purga.pl:3): print "Total parcial ", $total+=$_[1],",\n";

imprimiendo la línea de que se trata. Entonces podemos examinar variables, matrices o lo que se tercie, con la orden p, de print o imprimir. Incluso, con la orden <, nos ejecuta un comando antes de pararse, por ejemplo:

DB<3> < print $_[1]

Al llegar a las líneas problemáticas, nos encontramos que

main::(purga.pl:3): print "Total parcial ", $total+=$_[1], ",\n";
Bacterio DB<5> c
Total parcial 1699441.75,
main::(purga.pl:3): print "Total parcial ", $total+=$_[1], ",\n";
DB<5> 

De esta forma, observamos que en algunos casos, no se cumple que el segundo componente sea numérico: en un caso es una cadena, y en otro caso nada... Si nos fijamos en el fichero original, vemos que hay dos espacios tras Ofelia (será para hacerle sitio), con lo cual PERL, con toda su ilusión, divide la línea y no mete nada entre ellas. En realidad, esa línea es bastante rara, porque además aparece dos veces la cantidad, pero es igual. En cualquier caso, eso nos dice que en vez de usar el segundo componente desde el principio, debemos de usar el tercero desde el final, es decir, $_[$#_-2]. Con lo cual el programa funciona perfectamente, y nuestro político lo ha purgado.

En realidad, el debugger de PERL es bastante potente, a pesar de su presencia espartana, sobre todo porque incluye un intérprete y puede ejecutar sobre la marcha cualquier expresión. Incluso es aconsejable ejecutar un programa la primera vez desde este depurador, para corregir sobre la marcha cualquier problema.

El resto de las órdenes del depurador, que incluyen puntos de ruptura condicional, ejecución paso a paso (con s o simplemente dándole a enter), se consiguen con el comando de ayuda, h.

[ Pero ya puestos...] [ Preguntas frecuentemente preguntadas] [ Bibliografía.] [ Recursos Internet] [ Recordando, que es gerundio]