Tutorial de Perl Introducción al Perl



Descargar 248,88 Kb.
Página1/5
Fecha de conversión10.04.2017
Tamaño248,88 Kb.
  1   2   3   4   5
Tutorial de Perl

 

1. Introducción al Perl.



2. La sintaxis de Perl.

3. Tipos de datos.

4. Operadores.

5. Estructuras de control.

6. Expresiones regulares.

7. Creación de funciones.

8. Entrada / salida.

9. Variables predefinidas.

Introducción al Perl

1. ¿Qué es Perl?

Perl (Practical Extraction and Report Languaje) es un lenguaje creado a principio de los noventa por Larry Wall, el cual lo realizó casi como una obra altruista, por eso, su distribución es gratuita.

Perl es un lenguaje pensado para la manipulación de cadenas de caracteres, archivos y procesos. Esta manipulación se va simplificada por el importante número de operadores a disposición del usuario. El lenguaje Perl se percibe habitualmente como un lenguaje intermedio entre los shell scripts y la programación en C. En efecto, los programas en Perl son una sucesión de instrucciones y son similares a los shell scripts porque no existe un procedimiento principal como la subrutina main en C. Sin embargo, se parece al lenguaje C en su sintaxis y en el número importante de funciones que permiten la manipulación de cadenas de caracteres y archivos.

El lenguaje Perl no es precompilado, pero aún así es más rápido que la mayoria de lenguajes interpretados, en especial que el Bourne Shell. Esto se debe a que los programas en Perl son analizados, interpretados y compilados por el interprete perl antes de su ejecución.

Estas características hacen que el mantenimiento y la depuración de un programa en Perl sean mucho más sencilla que el mismo programa escrito en C.

Por todo esto, Perl es un lenguaje muy utilizado en los dos campos siguientes:

1. La administración de sistemas operativos. Debido a sus características Perl es muy potente en la creación de pequeños programas que pueden ser usados como filtros para obtener información de ficheros, realizar búsquedas, etc. Además, aunque Perl nació en un entorno Unix, hay versiones para casi todas las plataformas existentes.

2. La creación de formularios en la Web. Es decir, se utilizan para la creación de scripts CGI (Common Gateway Interface). Estos scripts realizan el intercambio de información entre aplicaciones externas y servicios de información, es decir, se encargan de tratar y hacer llegar la información que el cliente WWW manda al servidor a través de un formulario.

2. Acerca de las versiones de Perl.

Actualmente existen dos versiones altamente populares de Perl, la 4.3 y la 5.0, de hecho hay diferencias importantes entre una versión y otra. Seguramente el lector se pregunta porque surge la duda entre usar una versión vieja y una nueva, por regla general las nuevas versiones son mejores que las anteriores de modo que las opacan en todo sentido, Perl no es la excepción a esta regla, el único factor que impide una transición inmediata es que no son 100% compatibles. La versión 5 de Perl es una reescritura total que ya incluye un manejo de estructuras abstractas de datos mucho mas poderoso, incluso, soporta la orientación a objetos a su manera (lo que rompe en gran medida con la filosofía tradiconal de Perl de una programación más parecida a los Shells de Unix que al modular lenguaje C). De modo que las librerías, por ejemplo para creación de CGIs no funcionan de una función a otra por lo que la migración es poco practica.

En este tutorial seguiremos la filosofía tradicional de Perl y no nos adentraremos en la orientación a objetos.




La sintaxis de Perl

1. Un lenguaje interpretado.

Como sabemos Perl es un lenguaje interpretado, en consecuencia para ejecutar un script en Perl debemos indicarle al sistema en ese mismo instante el interprete que vamos a utilizar para ejecutar dicha script en Perl. Esto se puede realizar de dos formas:

1. Insertando en la primera línea del archivo la instrucción: #!/usr/local/bin/perl.
Esta sentencia indica al sistema operativo que lo que sigue es un script de Perl y que perl es el programa con el que debe ejecutarse. Dicho programa está en /usr/local/bin. Por tanto la secuencia !# es reconocida por Unix no por Perl.

2. Especificando el intérprete desde la línea de comando: perl script.pl.
Vemos como directamente se ejecuta el interprete de Perl pasando como primer paramétro el script a ejecutar. En el caso de haber más parámetros, éstos se tomarán como parámetros del programa.

Así sólo nos queda saber que para ejecutar un script, el fichero que lo contiene en este caso script.pl debe tener permiso de ejecución al menos sólo desde el punto de vista del usuario. Para saber los permisos que contiene un fichero en el sistema operativo Unix basta simplemente con teclear el siguiente comando: ls -l.


Si cuando tecleamos esto y vemos que no tiene permiso de ejecución, utilizaremos el siguiente comando para darle dicho permiso: chmod 700 script.pl.
De esta manera, sólo podremos leer, escribir y ejecutar el archivo nosotros como usuarios del mismo.

2. El intérprete de Perl.

Como ya hemos dicho en el capítulo anterior, una de las maneras de ejecutar un script de Perl era ejecutando dicho script como un parámetro de un interprete de Perl determinado. Pues bien, dicho intérprete posee ciertas opciones que nos proporcionan o bien información sobre el mismo, o bien ciertas facilidades a la hora de ejecutar los script como se podrá ver a continuación.


  • perl -v :  Muestra la versión del intérprete de Perl que estamos utilizando.

  • perl -V :  Muestra información sobre la configuración del intérprete de perl.

  • perl -e expresión :  Ejecuta la expresión como si ésta fuera un programa de una línea. Por ejemplo: perl -e "print 'hola a todos\n';"

  • perl -ne expresión :  Ejecuta la expresión como si está fuera un bucle repetitivo. He aquí un ejemplo: perl -ne "print if /M+/;" usuarios.txt . Este ejemplo extrae todos los usuarios cuyo nombre empieze por la letra M.

  • perl -d script : Ejecuta el script bajo el depurador.

  • perl -w script : Da avisos sobre las contrucciones con errores.

  • perl -pe expresión :  Ejecuta la expresión como si está fuera un bucle repetitivo y además imprime cada línea. He aquí un ejemplo: perl -pe "print if /M+/;" usuarios.txt . Observar diferencia con la opción -ne. La diferencia es que mientras la primera versión sólo imprimía los nombres que empezaban por M, la segunda por su parte imprimía todos los nombre una vez salvo los que empiezan por M que los imprime dos veces.

  • perl -x script : Empieza a interpretar el fichero que contiene el script cuando encuentra la referencia al intérprete, por ejemplo: #!/usr/bin/perl.

  • perl -i archivo :  Permite editar archivos. Por ejemplo, si ejecutamos lo siguiente sobre la línea de comandos: perl -p -i -e "s/\$seg/\$segundos/g;" tiempo.pl. Esta orden cambiará el nombre de la variable $seg por $segundos en el script contenido en el fichero tiempo.pl.

3. El primer programa en Perl.

Un script en Perl es una sucesión de instrucciones. Éstas se delimitan por punto y coma (;). Los comentarios en los scripts deben ir precedidos por el símbolo #. Los caracteres que siguen a este símbolo y que está contenidos en la misma línea se consideran comentarios y se ignoran.

El siguiente script muestra la cadena de caracteres "¡Hola, mundo!". Este script se llamará hola.pl y contendrá las siguientes líneas.

#!/usr/local/bin/perl


print "¡Hola, mundo!";

Una vez que hayamos verificado los permisos de dicho script estaremos listos para ejecutarlo simplemente tecleando en la línea de comandos: hola.pl.

Por último hacer notar que lo de la extensión .pl es simplemente una formalidad y que nos es absolutamente necesario que el fichero que contenga nuestro script lleve dicha notación.


Los tipos de datos

1. Los tipos básicos de datos básicos.

Perl permite representar los tipos de datos básicos como son los reales, los enteros, las cadenas de caracteres y el tipo booleano.

1.1. Los tipos numéricos (reales y enteros).

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

$x = 0.897;          # un real
$y = 6.23e-24;       # un real
$n = 567;            # un entero
$i = -234;           # un entero

Nota: El que todas las variables contengan un $ significan que representan un escalar. Esto lo veremos en el siguiente apartado.

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 se antecede con en cero 0; el código hexadecimal se antecede con un 0x o 0X. Por ejemplo:

$x = 0377;           # equivale a 255
$y = 0xff;           # equivale a 255

1.2. Las cadenas de caracteres.

Las cadenas de caracteres se especifican literalmente por medio de un sucesión de caracteres delimitada por comillas ("..") o apóstrofes ('..'). Estas dos representaciones se distinguen por la interpretación hecha por Perl de las cadenas de caracteres. Cuando van delimitadas por comillas (".."), toda variable referenciada en el interior de la cadena se evalúa y se reemplaza por su valor. Por ejemplo, las instruciones siguientes:

$wld = "mundo";
$str = "¡Hola $wld!";

asignan al escalar la cadena de caracteres "¡Hola mundo!". Por el contrario, las cadenas de caracteres delimitadas por apóstrofes se dejan intactas. Por ejemplo:

$str = '¡Hola $wld!';

asigna al escalar $str la cadena de caracteres "¡Hola $wld!".

Existe una tercera sintaxis que permite delimitar una cadena de caracteres. Se utiliza cuando la cadena de caracteres contiene varias líneas y/o comillas o apóstrofes. Su sintaxis es la siguiente:

$str = <

    ....

etiqueta


donde la etiqueta es una cadena de caracteres cualquiera. 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:

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

1.3. El tipo booleano.

El tipo booleano existe, al igual que en C, 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 ristra vacía (""), ésta también equivale al valor falso.

2. Las representaciones de datos.

El lenguaje Perl posee tres tipos de representaciones de datos:



  • los escalares.

  • los arrays.

  • los arrays de indexación literal o listas asociadas.

Estas tres representaciones permiten asociar a cada variable utilizada un tipo. Por otra parte, las variables Perl no tienen que declararse antes de su uso. Se asignan de manera dinámica y se les asigna un valor predeterminado en función del contexto.

2.1. Los escalares.

El escalar representa el tipo básico en Perl. Permite representar enteros, reales y cadenas de caracteres. Las variables de tipo escalar van precedidas por el símbolo $. A continuación veremos algunos ejemplos:

$real = 4.53;
$entero = -45;
$ristra = "Hola";

Las variables en Perl se asignan de manera dinámica y se les asigna un valor predeterminado en función del contexto. En un contexto numérico el valor predeterminado es 0, mientras que en un contexto de cadena de caracteres el valor predeterminado es la cadena vacía "".

Como ya hemos dicho, cuando una cadena de caracteres se delimita por comillas, el contenido de esta cadena es analizado por Perl para el reemplazo eventual por su valor de las variables escalares identificadas por el símbolo $. Este análisis se denomina interopolación de variables y puede evitarse poniendo delante del símbolo $ una barra oblicua inversa \ o delimitando la cadena de caracteres con apóstrofes. He aquí un ejemplo:

$adr = "www";


$msg = "El servidor web ${adr}.ulpgc.es"; print $msg, "\n";
$msg = "El servidor web $adr.ulpgc.es"; print $msg, "\n";
$msg = "El servidor web \$adr.ulpgc.es"; print $msg, "\n";
$msg = 'El servidor web $adr.ulpgc.es'; print $msg, "\n";

Observe la contrucción ${...} para referenciar el nombre de una variable en una cadena de caracteres. Si lo hubieramos omitido, el ejemplo anterior habría hecho referencia a la variable $adr.ulpgc.es no definida.

El tipo y el valor de las variables en Perl se determina a partir del contexto. Así, una cadena de caracteres conteniendo un valor numérico será convertida en variable numérica en un contexto numérico. Consideremos el código siguiente:

$x = 4.1;            # un real


$y = "11";           # una cadena de caracteres
$z = $x + $y;        # adición de dos valores numéricos
$t = $x . $y;        # concatenación de dos cadenas
print $z, "\n", "$t \n";

Al final del código la variable $z tiene el valor 15.1. Por otro lado, la variable $t contiene el valor "4.111". Por lo tanto en Perl no es necesario realizar una declaración de tipos, ni es necesario el operador cast, ni tampoco es necesario dar formato a los valores a la hora de imprimirlos como ocurría en C. Esta interpolación se produce a menudo en unas líneas de código tales como las siguientes:

$year = 35;
print "Tengo $year años";

El resultado de estas líneas de código es: "Tengo 35 años"; el contenido de la variable year se ha convertido en una cadena de caracteres.



2.2. Los arrays.

Un array es una lista de datos de tipo escalar. Cada elemento de la lista es una variable escalar a la que se le asocia un valor. Las variables de tipo array se identifican por el prefijo arroba @. Por ejemplo:

@numeros = (2, 1, 667, 23, 2.2, 5, 6);
@letras = ("perro", "gato", "león");
@mezcla = ("hola", 23, "adios", 31.234);

También se permite definir los elementos de un array a partir de sus valores extremos como se muestra a continuación:

@alfabeto = (a..z);

Los elementos de un array se referencian mediante índices. El primer elemento se referencia por el índice 0. Por ejemplo:

$numero[4];                  # vale 2.2
$letras[2];                  # vale "león"
$mezcla[0];                  # vale "hola"

También se puede  acceder a un array mediante el operador que define una horquilla de índices. Por ejemplo:

@num1 = @numeros[1..3];     # @num1 = (1, 667, 23)
@str = @letras[0,2];        # @str = ("perro", "león")
($ristra, $num) = @mezcla;  # $ristra = "hola", $num = 23

Esta última instrucción vemos que permite asignar los dos primeros valores del array @mezcla  a las variables escalares $ristra y $num. Por otro lado, el acceso a un array fuera de rango devuelve un valor indefinido 0 o "" según el contexto.

Por último, si vemos las siguientes líneas de código:

@a=(1,2,3);


@b=(5,6,7);
@c=(@a,4,@b,8);

Estas expresiones generan tres arrays, (1,2,3), (5,6,7) y (1,2,3,4,5,6,7,8), y no, como podría pensarse un array de arrays, cuando incluimos un array dentro de otro, Perl "aplana" el array insertado uno a uno todos sus elementos en la posición indicada del array que ha de contenerlos, para hacer array de arrays deberemos usar referencias a estos. Como veremos en el apartado 4 de este capítulo.



2.3. Las listas asociativas (arrays de indexación literal).

Una lista asociativa está indexada por cadenas en lugar de por números. Se utiliza % para definir el tipo de lista asociativa y un elemento está indexado por el anterior formando ambos parejas del tipo (clave, valor).

%cuota = ("root", 1000, "pat", 256, "fiona", 4000);

En este caso, para acceder a cualquiera de los elementos de %cuota debemos conocer su clave. Por ejemplo:

$id = $cuota{"pat"};      # $id = 256

Esta lista puede completarse añadiendo nuevos valores y asociando a cada clave el valor correspondiente. Por ejemplo:

$cuota{"dave"} = 250;

donde la clave es "dave" y el valor asociado es 250.

3. Los identificadores de las variables.

En cuanto a las ristras de caracteres que representan a nuestras variables decir que los caracteres permitidos son las letras, dígitos y el carácter underscore (_). Las letras mayúsculas y minúsculas son diferenciadas en los nombres de variables. Los nombre de las variables siempre deben comenzar por una letra. Se recomienda que los nombre de las variables estén en consonancia con lo que ellas representan, sin embargo estos tampoco deben ser demasiado largos. 

4. Las referencias.

Las referencias son el equivalente a los punteros en C. Es un tipo de datos que permite referenciar datos contenidos en otra entidad. No forman una nueva representación de datos, ya que éstos son tratados como un tipo más de escalar.

La definición de referemcia se usa mediante el operador de referencia backslash ("\"). No existe un operador de desrreferencia.

A diferencia de C, Perl no deja "huella" de las referencias en memoria sino que tiene un mecanismo de "papelera de reciclaje" que consiste en un registro que posee las diversas referencias a cada elemento en memoria y las destruye cuando descubre que nadie hace referencia a él.



4.1. Creación de referencias.

Podemos crear una referencia usando un operador de referenciación en una variable o un valor. En el caso de la variable es crear un medio alternativo de acceder al valor de la variable.

$rescalar = \$escalar;
$rarreglo = \@arreglo;
$rhash = \%hash;

Por otro lado, cuando usamos el operador de referenciación con un valor, creamos objetos anónimos que sólo pueden ser accedidos por medio de la referencia.

$rescalar=\"hola"; #referencia a la cadena anónima "hola"
$rarray=[1,2,3];   #referencia al array anónimo (1,2,3)
$rlista={"llave1" => "dato1","llave2" => "dato2"};

Nota: En esta representación usamos el operador "=>" para la representación de listas asociativas anónimas.

De esta manera se pueden construir estructuras de datos más complejas como se ve en el siguiente ejemplo:

%rNumeros = {"arabes" => [1,2,3], "romanos" => [I, V, X]}

El ejemplo que acabamos de ver forma una lista asociativa anónima donde las claves son cadenas de caracteres y los valores son referencia  a arrays.



4.2. Uso de referencias.

A continuación se dará la forma de acceder a las referencias y modifiar su valor. Como veremos en el ejemplo que viene a continuación para acceder al valor referenciado se usa el operador $ por duplicado. 

$nombre="entero";
$entero=5;
$rentero=\$entero;
$$nombre=6;
$$rentero=7;

Como se puede ver en este ejemplo cambia el valor de $entero de 5 a 6 y después de 6 a 7. A continuacuón veremos el uso de las referencias a arrays y listas asociativas.

$rarray=[1,2,3,4]   #crea arreglo anónimo (1,2,3,4)
$$rarray[2]="tres";
#modifica el array anónimo a (1,2,"tres",4)
@$rarray=();        #limpia el arreglo anónimo

Como forma de abreviar la referencia a listas asociativas o arrays se añadió en operador "->". A continuación veremos un ejemplo de uso del mismo.

$rarray->[2]="hola";
# Coloca "hola" como 3º elemento del array referenciado
$rlista->["clave1"]="valor1";
# Coloca el par ("clave1" => "valor1")

Se pueden realizar referencias a referencias y arreglos a referencias de forma que los arryas multidimensionales se pueden hacer con la misma facilidad que en C. Ejemplo:

$array3d->[0]->[0]->[0]=1;
# Forma abreviada:
$array3d[0][0][0]=1;
# También se puede usar
$array3d->[0][0][0]=1;

 


Los operadores en Perl

En Perl distinguiremos tres tipos de operadores dependiendo de la representación de datos sobre la que queremos actuar. De este manera habrá tres tipos de operadores: los operadores asociados a los escalares, los asociados a los arrays y por último, los vinculados a las listas asociativas.

1. Los operadores asociados a escalares.

Los operadores definidos en Perl tienen todos los operadores estándar (de tipo C) a los que añaden operadores específicos para la manipulación de cadenas de caracteres. Como veremos más adelante la precedencia de estos operadores sigue el mismo criterio que en el lenguaje C.



1.1. Operadores aritméticos.

Perl suministra los siguientes operadores aritméticos.



Entre los operadores artiméticos también distinguimos los de autoincremento (++) y autodecremento (--). Estos operadores son unarios y se realiza el incremento o decremento de la variable que se le aplica. Además de la acción de modificar la variable devuelven el valor de la variable.


El operador de incremento o decremento puede ir delante o detrás de la variable, teniendo diferente significado. Si el operador ++ se situa después de la variable se denomina postincremento, haciendo que primero se tome el valor y después se incremente la variable. Ejemplo:

$n = $k++;


 # el valor de k se asigna a n y después se incrementa k

Por otro lado, si el operador ++ se sitúa después de la variable se denomina preincremento y hace que primero se incremente la variable y después se tome el valor. Ejemplo:

$n = ++$k;
 # primero se incrementa k y luego se asigna a n

Finalmente, decir que con el operador de decremento se actúa de forma análoga obteniendo así el predecremento y el postdecremento.



1.2. Operadores relacionales.

Perl distingue dos tipos de operadores relacionales: los operadores específicos a valores numéricos y los propios  de las cadenas de caracteres. Estos operadores se resumen en la siguiente tabla:



A parte de los operadores que hay en la tabla cabe distinguir otros operadores únicamente característicos del lenguaje Perl.


  1   2   3   4   5


La base de datos está protegida por derechos de autor ©absta.info 2016
enviar mensaje

    Página principal