domingo, septiembre 03, 2006

Guía del Lenguaje Perl - 1ra parte

Hace algunos años atrás, a fin de preparar la práctica de una serie de asignaturas decidí utilizar el lenguaje Perl. La idea de programar en tales asignaturas tenía que ver con comprobar empiricamente algunos supuestos de la teoría. Seleccioné Perl por varias razones, pero la principal se centraba en que no quería que el lenguaje sea el obstáculo que no permitiera llegar al conocimiento. De esta forma, opte por Perl dado que necesitaba un lenguaje potente, con una buena curva de aprendizaje, que tuviera APIs para red, bases de datos, IR, IA, entre otros.

Hoy, acomodando "papeles digitales" he encontrado esta guía que confeccioné junto a Fernando Lorge y Gabriel Tolosa. Para no aburrirlos la pasaré en capítulos, creo que a los que les interesa IR está guía les será útil.



Guía Introductoria al Lenguaje Perl


versión 2.1

Fernando Bordignon, Gabriel Tolosa y Fernando Lorge
{bordi, tolosoft, florge}@mail.unlu.edu.ar

La presente guía es una versión “quick and dirty” -tal como dicen los anglosajones- con el objetivo de lograr un primer acercamiento al lenguaje. Se sugiere complementar el estudio con bibliografía adicional, como la recomendada.

Charles Babbage dijo "se cometen muchos menos errores usando datos incorrectos, que no empleando dato alguno". Es por esto que se pide perdón por los posibles errores que se hayan deslizado, y se solicita al lector que contribuya a mejorar este material de estudio, a partir de las correcciones y críticas que pueda aportar.

Fuentes de bibliografía adicional sobre el lenguaje Perl:

· Página oficial del lenguaje Perl. http://www.perl.com
· Curso de Perl (en inglés) http://fpg.uwaterloo.ca/perl/start.html
· Perl Mongers. http://www.perl.org/
· Editorial O´Reilly, página del lenguaje Perl. http://perl.oreilly.com/
· PerlDoc. http://www.perldoc.com/
· The Perl Journal. http://www.tpj.com/
· Perl Chile. http://www.perl.cl/
· En su unix escriba: man perl


Lugares de descarga del lenguaje:

· Página oficial del lenguaje Perl. http://www.perl.com
· CPAN - Módulos Perl. http://www.cpan.org/
· Activestate. Perl para Windows. http://www.activestate.com/


Filosofía de Perl: "Hay más de una forma de hacerlo" Larry Wall, su autor.


CAPITULO I: Introducción al Lenguaje

"Si no noto la resistencia del papel frente a la pluma, me siento incapacitado" Jean Daniel

Perl significa Lenguaje práctico de extracción y reporte (Practical Extraction and Report Language) . Su creador fue Larry Wall, y su objetivo era simplificar las tareas habituales a realizar en el sistema operativo Unix. Hoy es un lenguaje de propósito general, de alta portabilidad y es la herramienta principal que utilizan los webmasters para implementar programación a través de la interfase CGI.

Perl es un lenguaje interpretado, aunque transparentemente compile los programas antes de ejecutarlos. Es por ello que los ortodoxos de la comunidad hablan de guiones (scripts) y no de programas. Existe una numerosa cantidad de programadores Perl distribuidos a lo largo del mundo, ellos día a día producen nuevos módulos de librería que extienden asombrosamente las capacidades del lenguaje. En Perl, practicamente, es posible programar casi cualquier problema; maneja: comunicaciones entre computadoras, bajo protocolos TCP/IP; implementa hilos de ejecución (threads); implementa -opcionalmente- el estilo de programación orientado a objetos, posee APIs con todos los protocolos populares de aplicación en Internet. Aunque su punto debil es la perfomance en la ejecución de guiones -no alcanza las velocidades ofrecidas por lenguajes como el C-, Perl es un excelente lenguaje destinado al aprendizaje y el desarrollo de prototipos de modelos de software.

Perl es gratuito, hay completa libertad de copiar el código fuente, compilarlo, imprimirlo, compartirlo, etc, pero todo esto es bajo la licencia GNU, que en términos generales ordena que cualquier programa que se desarrolle se debe liberar, o sea si Ud. puede utilizar el código hecho por otros; otros pueden usar el código hecho por Ud.

Como se mencionó anteriormente, la portabilidad es una características de Perl. Los guiones se pueden ejecutar sobre distintos sistemas operativos como ser: Linux, System de Macintosh, Microsoft Windows, Solaris de Sun, BSD, etc. En definitiva, un programa puede correr en cualquier sistema operativo sin tener que modificar el código fuente; solamente es necesario poseer el interprete de Perl para cada sistema y librerías adicionales que use.

Con Perl se pueden: construir pequeños programas destinados a ser usados como filtros para obtener información en base a la lectura de archivos, realizar búsquedas, etc. Es uno de los lenguajes más utilizados en la programación de la interfase CGI, que sirve para el intercambio de información entre aplicaciones externas y el espacio web. Por ejemplo programas de búsqueda, y procesamiento de formularios, entre otros.

El siguiente es el clásico ejemplo de primer programa Perl

#!/usr/local/bin/perl
print "Hola Mundo!!!\n";

En la primer linea se le indica al sistema operativo el camino del interprete Perl, para que lo pueda cargar y ejecutar, y le pase como parámetro el guión que se halla más abajo. Por norma, todo guión lleva la extensión pl y se lo escribe utilizando un editor ASCII normal. Inicialmente, para ejecutar un programa siga la siguiente sintaxis:

perl

Para un mejor análisis de un programa, puede redireccionarse su salida a un archivo utilizando en la orden de ejecución el símbolo de redirección ">" y a continuación un nombre de archivo.


CAPITULO 2: Tipos de Datos, Variables y Arreglos

"La comunicación se compone de quien habla, quien escucha y lo que se dice". Aristóteles

Perl permite representar los siguientes tipos de datos básicos: reales, enteros, cadenas de caracteres y booleanos.

Los tipos numéricos (reales y enteros).

Los valores numéricos se presentan en forma de valores reales codificados en doble precisión. Este formato interno se utiliza para todas las operaciones aritméticas.

$z = 0.127; # real
$x = 3.22e-14; # real
$c = 1567; # entero
$d = -122; # entero

Los valores enteros no pueden empezar por cero porque esto permite especificar un entero mediante su codificación octal o hexadecimal. El código octal comienza con cero 0; el código hexadecimal comienza con 0x.

$x = 0377; # Representación octal, equivale a 255 decimal
$y = 0xff; # Representación hexadecimal, equivale a 255

Las cadenas de caracteres.

Las cadenas de caracteres se representan por medio de un sucesión de caracteres delimitada por comillas ó apóstrofes. Cuando una cadena se delimitada por comillas, toda variable referenciada en el interior de la cadena se evalúa y se reemplaza por su valor. Por ejemplo:

$cadena = "Brothers";
$almace = "Blues $cadena";

Por el contrario, las cadenas de caracteres delimitadas por apóstrofes se dejan intactas.

Existe una sintaxis especial que permite delimitar una cadena de caracteres cuando contiene varias líneas y/o comillas o apóstrofes. El fin de la cadena se determina por la nueva línea que contiene únicamente el identificador. Éste no debe ir precedido por un espacio ni marca de tabulación. Por ejemplo:

$cadena = <
hola,
buenos días,
adios,
SALUDO

El tipo booleano.

El tipo booleano existe de modo implícito, es decir, un número es falso si es igual a cero y verdadero en cualquier otro caso. Como el cero está asociado a la cadena vacía (""), ésta también equivale al valor falso.

Representaciones de datos.

Perl maneja datos escalares, siendo todos aquellos que contienen un valor; no importa si es real, entero, caracter o cadena; el lenguaje los reconoce automáticamente.El lenguaje posee tres tipos de representaciones de datos

  • Variables escalares.
  • Arreglos indexados escalares (listas).
  • Arreglos asociativos escalares (hash).

Las representaciones de datos son determinadas por la anteposición de un caracter especial.

  • $ Escalar.
  • @ Arreglo Indexado.
  • % Arreglo Asociativo.
  • & Función ó Procedimiento

Todas las representaciones tienen su propio nombre, así como las etiquetas, funciones, archivos y manejadores de directorios.

Variables escalares.

Se utiliza el caracter $ para indicar un valor escalar. La asociación ó bind de una variable con valor se hace con el caracter =.

$foo = 55.23;
$foo = 'esta es una cadena';
$foo = "era $foo antes"; # variable interpolada.
$salida= `cd`; # Se invoca al sistema operativo y el resultado
# de la salida

($a, $b) = ($b, $a) # intercambio (swap)

Ejemplo:

Sumar dos números y luego aplicar el operador de post-incremento

#!/usr/local/bin/perl

$a = 10; $b = 5;
$suma = $a + $b;
print "Resultado:”.$suma.”\n";
$suma++;
print "Despues de incrementar: $suma \n";

Ejemplo:

Verificar el método de intercambio de variables

#!/usr/local/bin/perl

$a = “Mundo”; $b = “Hola”;
($a, $b) = ($b, $a);
print "La famosa frase es $a $b!!! \n";

Ejemplo:

Ingresar dos cadenas y comparar si son iguales, idependientemente que sus caracteres estén en mayúsculas o minúsculas.

#!/usr/local/bin/perl

print "Ingrese 1er cadena:";
$cadenaa=[STDIN];#ingreso por teclado,reemplazar [] x menor y mayor
chop($cadenaa); #chomp elimina de cadenaa el enter
print "Ingrese 2da cadena:";
$cadenab=
[STDIN];#ingreso por teclado,reemplazar [] x menor y mayor
chop($cadenab);
$tmpa = "\U$cadenaa\E"; $tmpb = "\U$cadenab\E";
if ($tmpa eq $tmpb) {print "$tmpa y $tmpb son iguales \n";}
else {print "$tmpa y $tmpb NO son iguales \n";}

1 comentario:

Anónimo dijo...

Hola amigo, me gustaria saber si sabes como abrir documentos en Perl para windows, normalmente en linux seria algo asi como open (NOMBRE, "/direccion/archivo");

pero en Windows no se como hacer para que abra el archivo y lo imprima por ejemplo.

Mi correo es cafb_86@hotmail.com