viernes, septiembre 18, 2009

Utiliza perl para controlar tus sitios preferidos


Hola,

El lenguaje del camello es un lenguaje que siempre me ha gustado (por cierto, en los libros suelen poner un dromedario en lugar de un camello).

Posiblemente PERL no esté en su mejor momento, pero tiene unas ventajas claras:


  • Está por defecto en la mayoría de los UNIX.
  • Disponible con licencia GPL (software libre).
  • Disponible para Windows.
  • Preinstalado en la mayoría de las distribuciones GNU/Linux.
  • Preinstalado en Mac OSX como buen UNIX que es.
  • Es un lenguaje moderno y muy actualizado. Me refiero a que tiene cientos de módulos para hacer cualquier cosa (conexión a bases de datos, encriptación, web, etc. etc.). Este es el motivo por el cual lo he elegido hoy, en lugar del querido Pascal.
¿Por qué digo que no está en su mejor momento?

Bueno, Perl nace en 1987 como lenguaje de generación de informes. O sea, se trataba de un animal de carga no demasiado bonito pero que hacía maravillas en la Administración de hosts con gran capacidad para manejo de strings.

Luego evolucionó con la incorporación de múltiples mejoras. Conoció el boom de Internet con las CGI y finalmente llegó el declive por el crecimiento de Java, .NET, Python, PHP, etc. etc.

Perl nació y creció de una forma algo desordenada. Se le añadió la orientación a objetos con calzador, así como otras muchas historias. Al final resulta un lenguaje muy especial. Casi críptico, y eso en sí mismo también es bonito.

Desde 1994 la versión utilizada ha sido la 5. Sobre el año 2000 hubo calientes debates sobre cómo debería ser Perl 6. El caso es que todavía hoy creo que la versión estable es la 5.8.9. Como curiosidad, el Perl instalado en mi Mac OS X Leopard 10.5 es el 5.8.8

Vale ya de charletas, ¿Por qué se dice que Perl es tan potente?

Es por la gran cantidad de módulos que tiene. Hay módulos PARA TODO lo que se os pueda ocurrir y están disponibles en CPAN.

UN EJEMPLO

Supongamos que queremos hacer un programita Perl que nos diga si en alguno de los periódicos se habla de un determinado tema. Son por ejemplo 20 periódicos, y lo queremos mirar todos los días por lo que de alguna forma hay que automatizar el trabajo.

O supongamos que en nuestra empresa nos han encargado leer unos cuantos boletines oficiales para buscar subvenciones o algo así.

Un trabajo así de pesado es lo ideal para Perl.

Editamos el siguiente programa (en mi caso con el TextEdit de mac):



El que no haya visto nunca Perl creo que me entiende ahora cuando digo que es un poco críptico.


LA EXPLICACIÓN DEL PROGRAMITA

use LWP::Simple;
indica que utilice el módulo LWP::Simple (The World Wide Web module for Perl).
cuando se instala un módulo (en mi caso ya estaba instalado), también se instala la documentación.
Podemos hacer perldoc LWP para verla.

use strict;
es una directiva que es bastante recomendable para forzarnos a inicializar variables, etc.

my $contenido = get('http://aitoreus.blogspot.com');
inicializamos la variable "contenido" con la captura de la web que nos interese.

die "no consigo ver el sitio" unless defined $contenido;
esto es un poco enrevesado. Le pide al programa que "muera" escribiendo "no consigo ver el sitio", a no ser que la variable $contenido esté definida.

print "Hola chavalote. Estoy analizando http://aitoreus.blogspot.com";
escribe el texto sin más.

foreach my $palabrita (qw( pascal programacion program begin end))
El comando qw símplemente sirve para crear una lista con las palabras.
El foreach es una de las construcciones más divertidas de Perl.
Es un bucle for que además del bucle va asignando a la variable $palabrita cada término de la lista.
Lo que está entre llaves es lo que se ejecuta en cada iteración del bucle.

print "$palabrita\n" if $contenido=~ m/\b\Q$palabrita/;
Esto es otra muestra de la potencia de Perl. Son los patrones de búsqueda. Escribe la palabrita con un retorno de carro, si se cumple que la palabrita está en el contenido.

print "\n[Escaneo terminado el", scalar( localtime ), "]\n";
Escribe que ha terminado y pone la fecha y hora.

exit;
Y con esto yo también me despido.

Saludos.

No hay comentarios: