Tutorial de PERL en castellano : Todo bajo control

Preguntas frecuentemente preguntadas
Bibliografía.
Recursos Internet
Decodificando
El cofre de la sabiduría

Usando tuberías para controlar otros programas

Cuando nuestro político corrupto descubre que UNIX tiene ya preprogramadas muchas de las funciones que le hacía el militante de base, lo despide y decide usar esos programas de UNIX desde, por supuesto, un programa en PERL; además, decide tirar Windows95 a la basura e instalalarse Linux. Por ejemplo, para contar las palabras que hay en un fichero basta con usar la orden wc de UNIX. Pero si se presenta en modo bonito, puede salir el siguiente programa, llamado wc.pl


#!/usr/bin/perl
while (<*>) {
    ($zipi, $lineas, $palabras, $bytes, $nombref) = split(/\s+/,`wc $_`);
    print "El fichero $nombref tiene $palabras palabras y $lineas lineas\n";
}

La primera línea del bucle usa una bonita capacidad de PERL, llamada globbing o generalización. Lo que hace es que, si se pone algún comodín de ficheros del tipo * repetirá el bucle para cada fichero que cumpla ese patrón, asignando el nombre del fichero a la variable por defecto. Ese nombre se le pasa al comando wc, usando ``, es decir, comillas invertidas, que ejecutan un comando en UNIX devolviendo su salida estándar. Esa orden completa agarra la salida del comando, del tipo
lineas palabras bytes nombre del fichero
y la parte en sus componentes. Como las diversas palabras están separadas por varios espacios o tabuladores, se una el patrón \s+. Al principio de la línea hay una serie de espacios, por lo que el primer componente devuelto no tendrá nada.

Hay otra forma diferente de controlar programas en UNIX, esta vez interactivamente, usando los denominados pipes o tuberías, que se suelen indicar con el carácter |. Por ejemplo, la orden open( FICHERO, "|pepe" ), abre una tubería a la orden pepe, que a partir de entonces ejecutará los comandos que reciba del programa en PERL, ya que éste programa le suministrará la entrada estándar. Esto se puede usar de la siguiente forma (si se dispone del programa gnuplot):

open( GNU, "|gnuplot" );
print "Fichero a trazar? "; chop($fileN = <STDIN>);
print GNU "plot \"$fileN\" with lines 1\n";

que abrirá una tubería al programa y le enviará la orden para trazar un fichero con líneas. Con este tipo de órdenes y con gnuplot, y con unas pocas ganas, se pueden hacer animaciones. Sin embargo, hay que tener en cuenta que sólo se podrá hacer con programas que acepten comandos por su entrada estándar.

[ Preguntas frecuentemente preguntadas] [ Bibliografía.] [ Recursos Internet] [ Decodificando] [ El cofre de la sabiduría]