Está en la página 1de 47

Programación Aplicada

Clase 13: Introducción a PERL


Nombre unidad de aprendizaje: Programación avanzada de
SCRIPTS

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

 Construye rutinas scripting para el análisis de


LOG.
 Construye rutinas scripting Web de monitoreo
de proceso y eventos.
 Analiza rutinas predefinidas por sistema
operativo.

© 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!”

 Una lista se define listando sus elementos,


separados por comas y rodeados por
paréntesis donde así sea requerido por la
precedencia de los operadores.
 Para definir una lista podemos usar:
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 9
Escuela de Informática y Telecomunicaciones

Desarrollo
Variables y datos en PERL

@lista= (7, 15, “hola”, “chao”);

 Los elementos individuales de una lista son


accedidos utilizando un índice numérico (que
inicia en 0), dentro de corchetes.
 Por ejemplo, a $lista[0] le corresponde el 7, a
$lista[1] le corresponde el 15, a $lista[2] le
corresponde “hola” y a $lista[3] le corresponde
“chao”.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 10
Escuela de Informática y Telecomunicaciones

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”;

 Si este programa tiene como nombre “prg1”,


para ejecutarlo usaríamos:
[alumno@localhost ~]$ perl prg1
15
[alumno@localhost ~]$

© 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

print “hola PERL \n”;  hola PERL


print “5x3”;  555 (muestra 3 veces el 5)
print “hola”x2;  hola hola

 Para asignar un valor desde el teclado a una


variable, se asigna a la variable la
representación del teclado <STDIN>, de
acuerdo con el siguiente formato:
$variable=<STDIN>;
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 20
Escuela de Informática y Telecomunicaciones

Desarrollo
Entrada/Salida en PERL
 Por ejemplo, veamos un simple programa
PERL con E/S:
clear;
print “Ingrese Nombre: “;
$nom=<STDIN>;
print “Nombre=$nom”;

 La función chop se utiliza para eliminar el


último caracter de una entrada de datos,
normalmente nueva línea.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 21
Escuela de Informática y Telecomunicaciones

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…
}

 Veamos un ejemplo de uso de la sentencia


WHILE:

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

 La sentencia FOREACH se utiliza comúnmente


para recorrer los valores de los arreglos o
listas.

© 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:

foreach $variable (lista){


sentencias…
}

© 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

#Listar los datos del arreglo


clear;
print “Listado de datos \n\n”;
foreach $a (@A){
print $a,”\n”;
}

#Mostrar cantidad de datos


print “Cantidad de datos=“,$#A+1,”\n”;

© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 30
Escuela de Informática y Telecomunicaciones

Desarrollo
Control del flujo en PERL

#Sumar los datos del arreglo


clear;
$sum=0;
foreach $a (@A){
$sum = $sum + $a;
}
print “Suma=“,$sum,”\n”;

© 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”;
}

 Veamos un ejemplo de uso de estas


sentencias de control del flujo:

© 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);

 En este caso, caracter especificará el caracter


delimitador de campos que se usará, cadena
corresponde a la cadena que se va a dividir y
arreglo es en donde se almacenará la cadena
ya dividida.
© 2007 Cisco Systems, Inc. Todos los derechos reservados. Cisco Public 39
Escuela de Informática y Telecomunicaciones

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

También podría gustarte