02 enero 2006

Sobre Perl

El orígen de Perl (el autor lo quiso llamar Pearl, pero ese nombre ya existia) es el de un lenguaje orientado a tratar textos, pero ha ido evolucionando a lo largo de los años hacia un lenguaje de proposito general con usos tan variados como control de sistema, desarrollo de webs, interfaces gráficas, plug-ins y mucho más.

Desde sus orígenes Perl tiende a ser más práctico que elegante; por lo que permite crear apliaciones muy potentes en poco tiempo, pero con una alta probabilidad de que sea dificl de leer o destructurada. Sintácticamente, Perl es una mezcla de C con los lenguajes de shell de UNIX. La mayoría de estructuras son similares a C, pero en general más flexibles y las variables son de tipo dinámico, realizando una conversión automática siempre que es posible. También abundan las variables implicitas (variables que por defecto almacenan ciertos valores). También presenta rasgos de otros lenguajes, como listas similares a LISP.

La forma más natural de encontrar Perl es como lenguaje interpretado. El interprete, por lo general creado en C, suele ser bastante eficiente. La gestión de memoria es realizada totalmente por este interprete, que reserva y libera el espacio según es necesario. Otra característica importante es la gran cantidad de librerías de terceros que estan disponibles para Perl. A parte del interprete, existen multiples implementacione de Perl como lenguaje empotrado para otros lenguajes como C y Java.

Todo programa en Perl comienza con una linea de comentario (marcada en Perl con '#') indicando donde esta el interpete. Esta linea no es necesaria cuando se usa sobre Windows, pero por portabilidad, casi todos los scripts la incluyen.

#!/usr/bin/perl

Por otro lado, la popular llamada de C printf está disponible:

printf("¡Hola mundo!");

No es necesario declarar variables implicitamente, pero si queremos o necesitamos hacerlo:

my $una_variable_esalar;
my ($una_variable, $dos_variables);
my @variable_tipo_array;
my %variable_tipo_array_asociativo;

Como veis, las variables llevan un símbolo como primer caracter que indica su tipo. Las variables escalares pueden ser entaras, floats o cadenas, realizandose autoconversión entre ellas. Para declarar más de una variable en un my, debemos hacerlo como lista (o más bien array). Las comparaciones entre cadenas deben usar unos comparadores propios (eq, ne, ...):

if ($variable eq "cadena") { printf("Son iguales"); }

Todo condicional, escrito de esta manera, debe llevar "{" y "}", independientemente que solo haya una insrtucción. Veamos ahora las variables implicitas con un bucle:

my @mi_array = ("casa","coche","farola");
my $valor = $mi_array[0]; # acceso como escalar
foreach (@mi_array) {
    printf("\n $_");
}

La variable implicita $_ contiene el elemento actual cuando tratamos arrays en un bucle. Para escribir una variable por pantalla, se puede escribir directamente en una cadena, realizando el cambio por el valor automáticamente. También hay que tener en cuanta que debemos cambiar el símbolo usado por los arrays ('@') cuando los vamos a utlizar como escalar ('$').

Un array asociativo se utiliza de esta manera:

my %mi_array_asocc = ("clave 1" => "valor 1", "clave 2" => "valor 2");
my @lista_de_claves = keys %mi_array_asocc;
my @lista_de_valores = values %mi_array_asocc;

printf ("Claves \n");
foreach (@lista_de_claves) {
    printf("$_\n");
}

printf ("Valores \n");
foreach (@lista_de_valores) {
    printf("$_\n");
}


Una muestra de la potencia de Perl, para leer un archivo por lineas solo tenemos que:

my $file = "fichero.txt";
my @lineas;
print (" Leyendo archivo $file...\n");
if (!open (FILE, $file)) {printf("No se puede abrir $file\n"); exit(1); }
@lineas = ;
close FILE;
foreach (@lineas) {
    printf("$_\n");
}

Bueno, esto solo es la sintaxis más básica de Perl. Existen aun mas estructuras de control, acceso archivos, redes, ... y un sistema de subrutinas bastante potente. Y por supuesto inacabables librerías externas. Además he dejado intencionadamente fuera una parte importantísima de Perl, las expresiones regulares, que trataré en un post aparte.

En definitiva, Perl es un potente lenguaje de programación, que en ciertas tareas, permite crear una aplicación de manera rápida y eficiente, la cual nos llevaría mucho más tiempo con cualquier otro lenguaje (Java, C++,...). Con un poco de práctica, se aprende a utilizar todo su potencial y a evitar los problemas de ilegibilidad.

Links

1 comentario:

Randal L. Schwartz dijo...

Please don't link to a pirated copy of my book.