Perl

Perl (Practical Extraction and Report Language) es un lenguaje de programación desarrollado por Larry Wall a partir de otras herramientas para la Administración de tareas de UNIX. La ventaja de este lenguaje es que son líneas de código intermedias entre un lenguaje compilado y uno interpretado. No se establece una filosofía de programación concreta, es decir, que no podemos decir que sea orientado a objetos, estructurado o modular, sino mas bien un conjunto de ellos donde su punto fuerte es el procesamiento de texto y archivos. Si tienes UNIX, tan solo agrega al inicio de cada código lo siguiente:

#! /usr/bin/perl

Esto es para que se pueda ejecutar el perl script, probemos con un despliegue de texto. En el vi crea un archivo llamado primero.pl, después de la correspondiente línea anterior escribe:

print "Hola Mundo\n";

Después graba el archivo y observa que éste tenga permisos de ejecución, si no es así, cámbiaselos, después ejecutas el script desde el prompt: $perl primero.pl y das enter. Lo único que va a hacer es desplegar por pantalla la cadena "Hola Mundo".

En Perl existen tres tipos de variables a saber:

Variables Escalares

Comienzan con el signo $ y contienen datos de tipo escalar, es decir, numéricos y/o alfanuméricos, donde el texto se escribe entre comillas y a los numéricos solo se les asigna el valor por medio del signo igual (=).

Ejemplos:

$longitud=10.5;
$precio=20;
$driver="A";
$octal=024;
$hex=0xA9;

- Se pueden asignar valores entre variables:

$saludo1="Hola"; $saludo2="adios";
$saludo2=saludo1;

- Se pueden interponer variables:

$saludo1="Hola";
$saludo2="Como estas";
$nombre="Juan";
$saludar="$saludo1 $saludo2, $nombre"

- Se pueden asignar multiples valores a multiples variables:

$a="1";$b="2";c="3";
($x,$y,$z)=($a,$b,$c);

- Las variables pueden actuar como numericas o alfanumericas, cambiando con el signo "+" y el "." respectivamente:

Texto a Numerico (+):

$var1="1";$var2="2";$var3="3";
$total=$var1+$var2+$var3; --> total sería igual a 6

Numerico a Texto (.):

$juntos=$var1.$var2.$var3 --> total seria igual a 123

Variables de matriz: arreglos

Comienzan con el signo @ y contienen una lista de valores escalares, donde el índice (posición en la lista) se coloca entre corchetes [ ].

@respaldos=("diskett","compacto","zip","cinta");
$respaldos[0] -->sería diskett
$respaldos[1] -->sería compacto

- También podemos hacer referencia a varios valores:

$respaldos[0..3]; -->del índice 0 al 3
$respaldos[1,2] ; -->el índice 1 y 2

- También se acepta la interposición:

@dispositivos=("impresora",@respaldos,"monitor","teclado");

- Existen funciones para meter o sacar elementos:

push(@dispositivos,"scaner");
Un_Dispositivo=pop(@dispositivo);

- Reemplazar el primer elemento del arreglo:

unshift(@dispositivos,"teclado");

- Sacar el primer elemento del arreglo se asigna a una variable escalar:

$primero=shift(@dispositivos);

- Conocer el último índice (más uno, sería el total de elementos):

$#respaldos --> sería 3

 

Variables Matrices asociadas

Comienzan con el signo % (hash) y se trata de matrices que se referencían por el par clave/valor. Los valores se introducen manteniendo una relación en pares: el primer valor es la clave o referencia del siguiente. Se pueden asociar de dos formas:

%dia=(Lun,"Lunes",Mar,"Martes",Mie,"Miércoles",Jue,"Jueves",Vie,"Viernes",Sab,"Sábado",Dom,"Domingo");
%día=(
           Lun=>"Lunes",
           Mar=>"Martes",
           Mie=>"Miércoles",
           Jue=>"Jueves",
           Vie=>"Viernes",
           Sab=>"Sábado",
           Dom=>"Domingo"
           );

- La referencia a los valores se realiza mediante la variable escalar de la matriz asociada y sus claves.

$dia{Lun} sería "Lunes"

- La Asignación sería de forma similar:

$dia{Sab}="Sábadito";

- Si recorremos la matriz asociada mediante algún algoritmo, los pares de valores no se muestran en el mismo orden de introducción, solo se mantiene el orden del par clave/valor.

- También se cuenta con varias funciones para la utilización de las matrices:

delete($matriz{clave}); -->borra una clave con su valor
print values(%dia); -->muestra los valores de la matriz asociada
print keys(%dia); -->muestra las claves de la matriz asociada y la ordenamos asi: print sort(keys(%dia))
print each(%dia); -->muestra un par clave/valor
si_existe=exist $dia{Mar}; -->si existe, la variable "si_existe" será igual a 1
si_existe=defined $dia{Sab}; -->si está definida, la variable "si_existe" será igual a 1


Entradas y Salidas

La instrucción básica para mostrar el valor de las variables en pantalla es print. Existen muchos modificadores para las salidas y son los siguientes:

"\n" Nueva Línea
"\t" Tabulación
"\r" Retorno de carro
"\f" Nueva hoja (Form Feed)
"\b" Espacio Atrás (Back Space)
"\e" Secuencia de Escape
"\u" Pasa a Mayúscula el siguiente caracter del texto
"\U" Pasa a Mayúscula todo el texto siguiente
"\l" Pasa a Minúscula el siguiente caracter del texto
"\L" Pasa a Minúscula todo el texto siguiente
"\E" Fin de efecto de los modificadores \U y \L
"\a" Emite un pitido
"\cC Combinación de las teclas Control y (en este caso) la letra C.
xN Repite el texto anterior N veces (print 3x4=3333, print "Hola"x3=Hola Hola Hola Hola)

Los operadores aritméticos solo afectan los valores numericos.

+ (suma), - (Resta), * (Multiplicación), / (División), ** (Potencia), % (Módulo)

Para asignar un valor desde el teclado a una variable, se asigna a ésta, la representación del teclado que es <STDIN> que significa STandarD INput. Veamos un ejemplo clásico:

print "Escribe tu nombre: ";
$nombre=<STDIN>;
print "Hola $nombre !!";

Cuando terminamos de teclear nuestro nombre, oprimimos enter y este caracter queda dentro de la variable, para quitar este caracter existe un truco, solo usamos el comando chop de la siguiente manera:

$nombre=chop($nombre);


Estructuras de Control

Son heredadas del lenguaje C/C++, así que no será difícil adaptarse a ellas (para los que no saben programar en C, Perl les ayuda mucho para iniciarse).

Es normal que en un programa se tengan que tomar decisiones de acuerdo a los datos introducidos, para eso usamos la instrucción if (Si...) que en programacion llamamos condiciones.

if ($calificacion==10)
   {
    print "Felicidades";
   }

if ($calificacion eq 10)
    {
     print "Felicidades";
    }

Si existen varias comparaciones se utiliza "else".

Donde tenemos:

Igual que = o eq
No es igual que != o ne
Mayor que > o gt
Menor que < o lt
Mayor o igual que >= o ge
Menor o igual que <= o le

Una estructura condicional particular de Perl es unless, la cual significa hacer algo, a menos que no exista la condición o no se cumpla, por ejemplo:

unless ($respuesta)
    {
     print "La respuesta si existe !";
    }

unless ($respuesta="no")
    {
     print "La respuesta fue positiva";
    }

En programación usamos también algo que se llaman bucles que son ciclos definidos de un conjunto de instrucciones, los cuales se repiten N veces, es decir, las que querramos. El primer bucle que manejaremos es el For.

Para escribir los numeros del 1 al 10 haríamos lo siguiente:

for ($i=1;$i<=10;i++)
    {
     print "$i\n";
    }

Existen dos instrucciones que rompen con el ciclo normal del bucle, que son next y last. La primera salta la cuenta una vez y la segunda termina con el ciclo.

foreach se utiliza para recorrer los valores de las matrices, por ejemplo:

@nombres=("Juan","Antonio","Luis","Marcos");

foreach $persona(@nombres)
    {
     print"$persona\n"
    }

En el caso de matrices asociadas nos valemos de keys y values para contador del bucle.

%nombres=(J,"Juan",A,"Antonio",L,"Luis",M,"Marcos")

foreach $letra (keys %nombres)
    {
     print "$letra\n";
    }

while es un bucle que se repite mientras una condición se cumpla, por ejemplo:

$n=1;
while($n<=5)
    {
     print "Hola\n";
     if ($n==3)
        {
         print "Adios\n";
         exit;
        }
    $n++;
    }

El do - until es similar a la anterior: se repite el bucle hasta que se cumpla una condición.

$n=0;

do
    {
     print "hola\n";
    
$n++;
    }until (n==3)

Patrones de Búsqueda

Por ejemplo, si queremos comprobar que existe la palabra "Hola" en la cadena, haríamos lo siguiente:

$cadena="Hola Mundo";
if ($cadena=~/Hola/)
    {
     print "Si existe";
    }

El signo =~ significa "contiene" y la palabra va encerrada entre diagonales. Si queremos buscar algo con diagonales usamos la secuencia de escape \ para cada diagonal a buscar. El signo !~ es "no contiene".
Si queremos saber si una palabra está al principio de la cadena, se utiliza el signo especial ^ como sigue:

$cadena="Hola Mundo";
if ($cadena=~/^Hola/)
    {
     print "Si existe";
    }

Si buscamos una palabra que esté al final de la cadena utilizamos lo siguiente:

$cadena="Hola Mundo";
if ($cadena=~/$Hola/)
    {
     print "Si existe";
    }

Si queremos verificar que una cadena está vacía:

$cadena="Hola Mundo";
if ($cadena=~/^$/)
    {
     print "La cadena esta vacía";
    }

Si buscamos una palabra que empieza por una determinada letra:

$cadena="Hola Mundo";
if ($cadena=~/M*/)
    {
     print "Si está esa letra";
    }

Esta última tiene una variante que es "+" que se usa de la misma manera.

Si buscamos cualquier caracter:

$cadena="Hola Mundo";
if ($cadena=~/M?ndo/)
    {
     print "Si está la palabra";
    }

Buscar una palabra suelta o que forme parte de otra palabra:

$cadena="El oso es perezoso";
if ($cadena=~/\boso/)
    {
     print "La palabra oso se encuentra en la cadena por si sola";
    }
if ($cadena=~/\Boso/)
    {
     print "La palabra oso se encuentra dentro de alguna palabra de la cadena";
    }

Si queremos una búsqueda doble o alternativa hacemos lo siguiente:

$cadena="El oso y el tigre están durmiendo";
if ($cadena=~/oso\tigre/)
    {
     print "Existe un oso o un tigre en la cadena";
    }

A veces es necesario utilizar una variable implícita para no incluir el nombre de la variable en la comparación.

$_="Hola Mundo";
if (/Hola/)
    {
     print "Si existe";
    }

 

Sustituciones

Aparte de realizar búsquedas, podemos hacer sustituciones de letras o palabras, por ejemplo:

$_="Hola Mundo";
s/Hola/Adios/;
print $_;

Entonces la variable tendrá la frase "Adios Mundo".

Si queremos sustituir las letras "o" por la "a" realizamos lo siguiente:

s/[o]/a/g;

Donde "g" significa "globalmente". Si le agregamos una letra "i", no tomará en cuenta si son mayúsculas o minúsculas.

Para sustituir los espacios por un guión:

s/\s/-/g

 

Funciones aplicadas a expresiones regulares

SPLIT. Se basa en la división de una cadena en distintos campos usando como delimitador un caracter dado y que formará parte de una expresión regular de búsqueda. La función devuelve una matriz o array con los distintos campos obtenidos.

$usuarios="Juan:Pedro Jose:Carlos:Jose Maria";
@personas=split(/:+/,$usuarios);
foreach$nombre(@personas)
{
  print "$nombre\n";
}

JOIN. Esta función es contraria a la anterior y consigue componer un registro con distintos campos usando como delimitador de cada campo un caracter dado.

@personas=("Juan","Francisco","Luis","Daniel");
@registro=JOIN(":",@personas);
foreach$cadena(@registro)
{
print "$cadena\n";
}

 

Hosted by www.Geocities.ws

1