Tutorial de PERL en castellano : Pero ya puestos...

Preguntas frecuentemente preguntadas
Bibliografía.
Recursos Internet
Regularizando la situación
Purgando los pecados.

La orden grep

... se puede hacer de una forma más simple. Nuestro político se dio cuenta rápidamente que muchas de esas operaciones se pueden hacer en una sola línea, y así ahorra uno espacio en disco duro, que va caro. Por ejemplo, el programa congrep.pl


@zipi=<>;
grep( ( split(/ /) && print "Total parcial ",$total+=$_[$#_-2],"\n"),@zipi);

; en un par de líneas. En general, la función grep, que recuerda al grep del sistema operativo, pero no tiene mucho que ver con ella, sirve para procesar matrices enteras. Como primer argumente se le pasa una expresión, pero ya se ve que en perl el concepto de expresión es un poco amplio; de hecho, el programa anterior es uno de los ejemplos de programa críptico que los perl-hackers tanto conocemos y amamos.

Pero en fin, vamos a ello: la expresión, para empezar, está entre paréntesis; luego, consiste en dos partes separadas por &&; este operador nos garantiza el orden de evaluación, y además no evalúa la parte de la derecha si no ha podido ejecutarse la de la izquierda; en resumen, la expresión hace lo mismo que las dos líneas del interior del bucle anterior... Y, ¿qué hace grep, entonces? Simplemente, le asigna a $_ cada uno de los componentes de la matriz que se le pasa como segundo argumento, y crea otra lista que tiene como componentes aquellos para los cuales la expresión es verdadera. Por ejemplo, podemos crear a partir del anterior otro programa que imprima sólo los que hayan pagado por encima de una pasta determinada, y además los meta en una matriz (mailing.pl):

@zipi=<>;
@ricos=grep( split(/ /) && ($_[$#_-2] > 200000) , @zipi );
print @ricos;
  1. Hacer un programa que extraiga de un array todos aquellos elementos que aparezcan más de una vez, y los coloque en otro array. Hacerlo usando grep.
Ejercicios
[ Preguntas frecuentemente preguntadas] [ Bibliografía.] [ Recursos Internet] [ Regularizando la situación] [ Purgando los pecados.]