Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Escuela de
Informática y Telecomunicaciones
2008 Escuela de Informática y Telecomunicaciones, DuocUC
Escuela de Informática y Telecomunicaciones
Objetivos
Objetivos de la clase
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 2
Escuela de Informática y Telecomunicaciones
Desarrollo
Introducción a PERL
PERL es un lenguaje de programación que
está orientado principalmente a las labores de
procesamiento de textos y archivos.
PERL (Practical Extraction and Report
Language) es un lenguaje de programación
desarrollado por Larry Wall en 1987 a partir de
otras herramientas de UNIX como son: ED,
GREP, AWK, C SHELL, para la administración
de tareas propias de los sistemas UNIX.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 3
Escuela de Informática y Telecomunicaciones
Desarrollo
Introducción a PERL
Estructuralmente, PERL está basado en un
estilo de bloques como los del lenguaje C o
AWK, y fue ampliamente adoptado por sus
facilidades en el procesado de texto y de
archivos, además de no tener ninguna de las
limitaciones de los otros lenguajes de script.
El número de plataformas soportadas es una
de las razones por las cuales PERL ha tenido
tan buena acogida; existe un PERL para
prácticamente todas las plataformas conocidas.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 4
Escuela de Informática y Telecomunicaciones
Desarrollo
Introducción a PERL
PERL no es ni un compilador ni un interprete,
está en un punto intermedio, cuando
mandamos a ejecutar un programa en PERL,
se compila el código fuente a un código
intermedio en memoria que se optimiza como
si fuésemos a elaborar un programa
ejecutable, pero es ejecutado por un motor,
como si se tratase de un interprete.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 5
Escuela de Informática y Telecomunicaciones
Desarrollo
Variables y datos en PERL
En PERL no se declaran las variables ni sus
tipos.
Las variables van precedidas de caracteres
especiales, que hacen referencia a su tipo: “$”
para las variables escalares, “@” para listas y
% para matrices asociadas o “hashes”.
Un escalar es un solo valor; puede ser un
número, un string (cadena de caracteres) o una
referencia.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 6
Escuela de Informática y Telecomunicaciones
Desarrollo
Variables y datos en PERL
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.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 7
Escuela de Informática y Telecomunicaciones
Desarrollo
Variables y datos en PERL
Una lista es una colección ordenada de
escalares; una variable que almacena una lista
se llama array o arreglo.
Un hash, o memoria asociativa, es un mapeo
de strings a escalares; los strings se llaman
claves y los escalares valores.
Por ejemplo, para definir variables escalares
podemos usar:
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 8
Escuela de Informática y Telecomunicaciones
Desarrollo
Variables y datos en PERL
$num=10;
$hexa=0x1A;
$msg=“Hola Mundo!”
Desarrollo
Variables y datos en PERL
Desarrollo
Variables y datos en PERL
En PERL el tipo booleano existe, al igual que
en el lenguaje 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 cadena vacía
(""), dicha cadena también equivale al valor
falso.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 11
Escuela de Informática y Telecomunicaciones
Desarrollo
Arreglos en PERL
Los arreglos o lista de PERL comienzan con el
signo “@“ y contienen una lista de valores
escalares (números y/o textos).
Al ser una lista de valores, para acceder a cada
de uno estos se utiliza un número que indica su
posición dentro de la lista.
La numeración empieza en 0, y se coloca entre
corchetes [ ].
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 12
Escuela de Informática y Telecomunicaciones
Desarrollo
Arreglos en PERL
A este número que indica la posición de un
valor dentro de la lista del arreglo se le
denomina índice.
Como se vio anteriormente, para la asignación
de un arreglo se usa el caracter “@”, y para
acceder a un valor individualmente se utiliza el
signo “$”, ya que en definitiva un arreglo está
formado por distintas variables escalares.
Veamos un programa PERL que usa arreglos:
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 13
Escuela de Informática y Telecomunicaciones
Desarrollo
Arreglos en PERL
clear;
@A=(7,15,”hola”,”chao”);
print $A[1],”\n”;
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 14
Escuela de Informática y Telecomunicaciones
Desarrollo
Arreglos en PERL
Asociados a los arreglos, existen algunas
funciones en PERL que ayudan a poner o
sacar elementos de la lista de datos del
arreglo:
push – Colocar nuevos elementos al final de la
lista: push(@arreglo, valores).
pop – Sacar el último elemento del arreglo. Se
puede asignar a una variable tipo escalar:
$variable=pop(@arreglo).
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 15
Escuela de Informática y Telecomunicaciones
Desarrollo
Arreglos en PERL
unshift - Reemplazar el primer elemento del
arreglo: unshift(@arreglo, valor).
shift - Sacar el primer elemento del arreglo. Se
puede asignar a una variable de tipo escalar:
$variable=shift(@arreglo).
También se tiene una notación especial para
conocer el último índice del arreglo, por medio
de $#nombre_arreglo.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 16
Escuela de Informática y Telecomunicaciones
Desarrollo
Arreglos en PERL
Veamos un ejemplo en donde se muestran los
efectos de la aplicación de estas funciones
sobre un arreglo.
Para efectos de comprensión se han
especificado los valores impresos por los print
y se han “dibujado” los arreglos y sus
contenidos, en la medida que se aplican las
funciones sobre él.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 17
Escuela de Informática y Telecomunicaciones
Desarrollo
Arreglos en PERL
clear;
@A=(7,15,”hola”,”chao”); - - - - - -
print $A[1],”\n”; 15
push(@A,10,”Perl”); - - - - - - - - - -
print $A[5],”\n”; Perl
print “Último Índice=”,$#A,”\n”; 5
shift (@A); - - - - - - - - - - - - - - - - -
print $A[0],”\n”; 15
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 18
Escuela de Informática y Telecomunicaciones
Desarrollo
Entrada/Salida en PERL
El print es la instrucción básica para mostrar el
valor de las variables en pantalla.
Existen muchos modificadores para la salida
de los valores de las variables en pantalla,
entre algunos de estos, podemos nombrar: “\n”
para nueva línea, “\t” para tabulación, “\r”
para retorno de carro, xN para repetir un
caracter o texto anterior N veces, etc.
Veamos algunos ejemplos de uso de print:
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 19
Escuela de Informática y Telecomunicaciones
Desarrollo
Entrada/Salida en PERL
Desarrollo
Entrada/Salida en PERL
Por ejemplo, veamos un simple programa
PERL con E/S:
clear;
print “Ingrese Nombre: “;
$nom=<STDIN>;
print “Nombre=$nom”;
Desarrollo
Entrada/Salida en PERL
chop(...) elimina el último caracter de una
entrada por teclado. Un ejemplo de uso sería:
$nom=chop($nom);.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 22
Escuela de Informática y Telecomunicaciones
Desarrollo
Control del flujo en PERL
La mayoría de las estructuras de control en
PERL, han sido heredadas del lenguaje
C/C++.
La estructura condicional más simple es el IF:
if (condición){
sentencias…
}
else{
sentencias…
}
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 23
Escuela de Informática y Telecomunicaciones
Desarrollo
Control del flujo en PERL
En la evaluación de las condiciones del IF (y de
cualquier sentencia de control del flujo)
podemos usar <, <=, >, >=, == y != para
comparar números y lt, le, gt, ge, eq y ne para
comparar literales.
Veamos un ejemplo de uso de estos
operadores:
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 24
Escuela de Informática y Telecomunicaciones
Desarrollo
Control del flujo en PERL
clear;
print “Número: “;
$num=<STDIN>;
chop($num);
if ($num >= 0){
print $num,” es positivo \n”;
}
else{
print $num,” es negativo\n”;
}
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 25
Escuela de Informática y Telecomunicaciones
Desarrollo
Control del flujo en PERL
La sentencia iterativa WHILE presenta el
siguiente formato:
while (condición){
sentencias…
}
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 26
Escuela de Informática y Telecomunicaciones
Desarrollo
Control del flujo en PERL
clear;
$i=1;
while ($i <= 5){
print $i*$i,”\n”;
$i=$i + 1;
}
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 27
Escuela de Informática y Telecomunicaciones
Desarrollo
Control del flujo en PERL
Los elementos del arreglo o lista actúan como
contadores del ciclo, ejecutándose el ciclo una
vez por cada uno de estos elementos.
La sintaxis para FOREACH es la siguiente:
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 28
Escuela de Informática y Telecomunicaciones
Desarrollo
Control del flujo en PERL
#Llenar arreglo con datos
clear;
@A=();
while (1){
print “Ingrese dato: “;
$dato=<STDIN>;
chop($dato);
push(@A,$dato);
print “Más datos [Si/No]: “;
$opc=<STDIN>;
if ( chop($opc) eq “No”){
last;
}
}
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 29
Escuela de Informática y Telecomunicaciones
Desarrollo
Control del flujo en PERL
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 30
Escuela de Informática y Telecomunicaciones
Desarrollo
Control del flujo en PERL
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 31
Escuela de Informática y Telecomunicaciones
Desarrollo
Control del flujo en PERL
Veamos un ejemplo de uso de la sentencia
FOREACH:
clear;
@A=(1,7,”Hola”,10);
foreach $a (@A){
print $a,”\n”;
}
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 32
Escuela de Informática y Telecomunicaciones
Desarrollo
Expresiones regulares en PERL
Una de las características más potente y
usadas en PERL es la manipulación de
cadenas y archivos.
Para ello existen una gran variedad de
EXPRESIONES y PATRONES que nos
facilitan esta tarea. Para estas expresiones se
usan una serie de caracteres especiales que
juntos o por separado actúan como
PATRONES DE BÚSQUEDA, comparación o
sustitución en una cadena.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 33
Escuela de Informática y Telecomunicaciones
Desarrollo
Expresiones regulares en PERL
Estas expresiones se colocan entre 2 barras
"/", así: /Hola/ y algunos caracteres con un
significado especial que actúan como patrones
de búsqueda, como: ^,*,$,?,etc.
Para búsquedas PERL nos provee de los
siguientes operadores: “=~” para contiene a,
“!~” para no contiene a, “^” para principio de
cadena o línea, “$” para final de cadena o
línea.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 34
Escuela de Informática y Telecomunicaciones
Desarrollo
Expresiones regulares en PERL
Algunos meta-caracteres utilizados en los
PATRONES DE BÚSQUEDA de PERL son los
siguientes: “*” y “+” para denotar “cualquier
cosa” en una expresión, “?” y “.” para denotar
“un solo carácter” en una expresión.
Hay otras combinaciones de caracteres que
actúan como PATRONES. Se colocan entre
corchetes. Por ejemplo:
[qjk] para denotar las letras q o j o k.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 35
Escuela de Informática y Telecomunicaciones
Desarrollo
Expresiones regulares en PERL
[^qjk] para denotar todo lo que no sea ni q ni
j ni k. En estos casos el signo ^ al principio
indica NO.
[a-z] para denotar cualquier caracter desde a
hasta z inclusive y en minúscula.
[^a-z] para denotar ninguna letra en
minúscula.
[a-zA-Z] para denotar cualquier letra
mayúscula o minúscula.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 36
Escuela de Informática y Telecomunicaciones
Desarrollo
Expresiones regulares en PERL
Veamos un ejemplo de uso de las
EXPRESIONES REGULARES:
clear;
$cad=“Hola que tal”;
if ($cad =~ /q+/){
print $cad,” cont. palabra q’empieza con q \n”;
}
If ($cad =~ /^Hola/){
print “Cierto…\n”;
}
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 37
Escuela de Informática y Telecomunicaciones
Desarrollo
Funciones aplicadas a expresiones
regulares en PERL
Además de las EXPRESIONES REGULARES
y los distintos PATRONES DE BÚSQUEDA,
PERL incluye una serie de funciones
especiales para el tratamiento de cadenas.
SPLIT – Esta función se usa para dividir una
cadena en varios campos delimitados por
algún caracter. La función devuelve un arreglo
con los distintos campos obtenidos.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 38
Escuela de Informática y Telecomunicaciones
Desarrollo
Funciones aplicadas a expresiones
regulares en PERL
La sintaxis de SPLIT es la siguiente:
@arreglo=split(caracter, $cadena);
Desarrollo
Funciones aplicadas a expresiones
regulares en PERL
Veamos un ejemplo de uso de SPLIT:
clear;
$cad=“Juan:Perez:17”;
@reg=split(/:/, $cad); - - - - - -
foreach $r (@reg){
print $r,”\n”;
}
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 40
Escuela de Informática y Telecomunicaciones
Desarrollo
Funciones aplicadas a expresiones
regulares en PERL
JOIN – Esta función permite componer u
registro con distintos campos, usando un
carácter dado como delimitador de campos del
registro. La función devuelve una cadena con
campos delimitados.
La sintaxis de JOIN es la siguiente:
$registro=join(caracter, @cadena);
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 41
Escuela de Informática y Telecomunicaciones
Desarrollo
Funciones aplicadas a expresiones
regulares en PERL
Veamos un ejemplo de uso de JOIN:
clear;
@datos=(Juan,Perez,17);
$reg=join(“*”, @datos);
print $reg,”\n”;
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 42
Escuela de Informática y Telecomunicaciones
Desarrollo
Sustitución en expresiones regulares
Hasta ahora hemos usado las EXPRESIONES
REGULARES sólo para realizar búsquedas,
pero también se pueden usar para realizar
SUSTITUCIONES DE CADENAS.
En las SUSTITUCIONES anteponemos a los
delimitadores de expresión regular "/../" la letra
"s" de sustitución.
Por ejemplo, s/Hola/Hello/ permite sustituir la
palabra "Hola" por “Hello".
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 43
Escuela de Informática y Telecomunicaciones
Desarrollo
Sustitución en expresiones regulares
s/[o]/a/g; permite sustituir todas las “o” por “a”.
El modificador g incluido en la orden hace que
la sustitución sea “global”.
s/\s/-/g; permite reemplazar todos los espacios
(\s) entre palabras por un guión "-".
s/o/a/gi; permite sustituir todas las “o” por “a”,
incluso las que están en mayúscula. El
modificador i incluido en la orden hace que no
se haga distinción entre mayúsculas y
minúsculas. © 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 44
Escuela de Informática y Telecomunicaciones
Desarrollo
Sustitución en expresiones regulares
Notar que en estas EXPRESIONES
REGULARES:
“\s” denota un espacio y equivale a la
expresión [\r\t\n\f].
“\d” denota un dígito y equivale a la expresión
[0-9].
“\w” denota una palabra y equivale a la
expresión [a-zA-Z0-9_].
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 45
Escuela de Informática y Telecomunicaciones
Resumen
Resumen de la clase
Algunas de las ventajas del uso del lenguaje PERL son las siguientes:
Construcción de pequeños programas que pueden ser usados como
filtros para obtener información de archivos, realizar búsquedas, etc.
Se puede utilizar en varios entornos, como puede ser Windows 95, OS/2,
obviamente UNIX y LINUX..., sin realizar cambios de código, siendo
únicamente necesario la introducción del interprete PERL
correspondiente a cada sistema operativo.
También es uno de los lenguajes mas utilizados en la programación de
CGI scripts, que son guiones o scripts que utilizan el interface CGI
(Common Gateway Interface), para intercambio de información.
El mantenimiento y depuración de un programa en PERL es mucho más
sencillo que la de cualquier programa en C.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 46
Escuela de Informática y Telecomunicaciones
Resumen
Resumen de la clase
No resulta, en cambio, indicado para desarrollar procesos de puro cálculo
científico o programas que necesitan una gran velocidad y precisión de
cálculo o elaboraciones numéricas complejas.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 47