|
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";
}
|