if ($x>=$y)

Anuncio
TUTORIAL
PERL
Sabino Miranda Jiménez
[email protected]
Resumen
• Introducción a Perl
• Definición de variables
• Estructuras de control
• Estructuras para el manejo de datos
• Arreglos
• Hash
• Expresiones regulares
• Manejo de archivos
Acerca de Perl
• Diseñado por Larry Wall en 1987
• Toma características de
•
•
•
•
•
•
C
Bourne shell (sh)
AWK
Sed
Lisp
otros lenguajes de programación, en menor grado.
• Lenguaje interpretado
• Versión 5 soporta
• Estructuras de datos complejas
• Funciones de primer orden
• Programación orientada a objetos
• Uso de módulos
Definición de variables
• Una variable es un lugar donde se guarda
información
Tipo
Carácter
Ejemplo
Descripción
Escalar
$
$nombre
Valor individual
Arreglo
@
@edades
Lista de valores, indexado por
un número
Hash
%
%nomEdades
Grupo de valores, indexado
por una cadena (clave-valor)
Subrutina
&
&rutina
Código de Perl que se puede
invocar
Typeglob
*
*tipo
Representa a cualquier tipo
anterior
Escalares
Definición de variables se usa el símbolo ($)
$entidad = "casas";
$modificador = 'rojo';
$i = 10;
print $entidad;  imprime "casas"
Para concatenar cadenas  operador punto (.)
print $i . " " . $entidad  imprime "10 casas"
Arreglos
Un arreglo se define listando sus elementos separados
por comas y entre paréntesis. Se define por el símbolo
(@)
@frecuencia = (10, 33, 44, 16);
Para acceder a los elementos se usa un índice,
generalmente inicia en cero,
$frecuencia[2] #elemento 44
#obtiene el número de elementos del arreglo
frecuencia
$numero = @frecuencia;
# numero obtiene 4
Hashes
Un hash es un arreglo asociativo (clave, valor). Se
define por el símbolo (%)
%ejem_hash =
( casa => 6233,
rojo => 511,
comer => 322,
ir => 2333, );
Operadores aritméticos
Operación
Operador
Ejemplo
Suma
+
$val = 5 + 7
Resta
-
$val = 15 – 5
Producto
*
$val = 15 * 2
División
/
$val = 10 / 5
Módulo
%
$val = 9 % 2
$val 1
Exponenciación
**
$val = 3**2
$val 9
Operadores relacionales
Operador
Descripción
==
Igualdad
!=
Desigualdad
<
Menor que
<=
Menor o igual que
>
Mayor que
>=
Mayor o igual que
Operadores lógicos
Operador
Descripción
and
&&
Conjunción
or
||
Disyunción
not
!
Negación
Operadores para cadenas
Operador
Descripción
eq
Igualdad
ne
Desigualdad
lt
Menor que
le
Menor o igual que
gt
Mayor que
ge
Mayor o igual que
Funciones básicas
Función
Descripción
Ejemplo
abs($x)
Obtiene el valor absoluto
$val = abs(-10);
$val  10
int($x)
Obtiene la parte entera
$val = int(8.5);
$val  8
sqrt($x)
Obtiene la raíz cuadrada
$x>=0
$val = sqrt(25);
$val  5
rand()
Obtiene un valor entre 0 y 1
$val = rand();
chomp($x)
Remueve, generalmente, un
salto de línea del final de la
línea
$x =’10\n’;
chomp($x);
$val  ‘10’
split(expreg,datos) Devuelve un arreglo con los
elementos obtenidos de
datos según la expresión
regular indicada
@dat = split(/\s+/, "el perro del
panadero");
Estructuras condicionales
If ( expresión_condicional) {
…. # acciones cuando es verdadera la condición
} else {
…. # acciones cuando es falsa la condición
}
Estructuras condicionales (2)
If ( expresión_condicional1) {
…. # acciones cuando es verdadera la condición1
} elsif (expresión_condicional2) {
…. # acciones cuando es verdadera la condición2
} else {
…. # acciones cuando es falsa la condición1 y 2
}
Ejemplo: lectura de tres números, identifica al mayor
$x = <>;
$y = <>;
$z = <>;
chomp($x);
chomp($y);
chomp($z);
if ($x>=$y){
if ($x>=$z){
print "el número mayor es $x";
}else {
print "el número mayor es $z";
}
}elsif($y>=$z){
print "el número mayor es $y";
}else{
print "el número mayor es $z";
}
Estructuras iterativas
• while
• for
• foreach
last
 similar a break (Java) ;
next  similar a continue (Java);
Estructuras iterativas (2)
while ( expresión_condicional) {
…. # acciones mientras sea verdadera la condición
}
for( acciones_ini ; condición ; acciones_x_iteración) {
…. # acciones mientras sea verdadera la condición
}
Estructuras iterativas (3)
foreach $x ( grupo_datos) {
…. # acciones para cada elemento del grupo
}
Ejemplo: primeros 10 números
$x = 1;
while ($x<=10) {
print "$x\n";
$x++;
}
Ejemplo: primeros 10 números
$x = 1;
while ($x<=10) {
print "$x\n";
$x++;
}
for ($x=1;$x<=10;$x++) {
print "$x\n";
}
Ejemplo: primeros 10 números
$x = 1;
while ($x<=10) {
print "$x\n";
$x++;
}
for ($x=1;$x<=10;$x++) {
print "$x\n";
}
foreach $x (1,2,3,4,5,6,7,8,9,10) {
print "$x\n";
}
Uso de next & last
for($x = 0 ; $x < 100 ; $x++) {
if($x == 74) {
last; # Fuera de Ciclo
}
if($x % 9 != 0){
next; # Siguiente Iteración
}
print "$x\n";
}
Manipulación de cadenas
• Operadores
 sustitución de secuencia de
caracteres
tr/patrón/sustitución/  cambia caracteres individuales
m/patrón/
 igualamiento de caracteres
s/patrón/sustitución/
Operadores de vinculación
=~
 vincula una expresión de cadena con el
patrón de igualamiento
$_ : variable por defecto
!~
 similar a =~ pero lógicamente negado
cadena =~ m/patrón/
Manipulación de cadenas
Opciones operador ‘s’
Sólo reemplaza la primera ocurrencia del patrón buscado
g: reemplaza cada aparición del patrón
i : ignora entre mayúsculas y minúsculas
m : la cadena que se evaluará es de varias líneas
s/patrón/sustitución/gi
Manipulación de cadenas
tr/conj1/conj2/
Traduce el primer conjunto de caracteres en el segundo
conjunto.
• Si el segundo conjunto es más pequeño, el último
carácter se multiplica
• Si el segundo conjunto es más grande, los caracteres
adicionales se truncan
Opciones operador ‘tr’
c : reemplaza el complemento de la clase de búsqueda
d : borra los caracteres de la clase de búsqueda que no
son reemplazados
s : reduce la secuencia de caracteres idénticos a uno solo
Ejemplos
# reemplaza la primer ocurrencia de "el"
$text = "De los cerros altos del sur, el de Luvina es el más
alto y el más pedregoso.";
$text =~ s/el/EL/;
print "ej1: $text\n\n";
# reemplaza todas las ocurrencias de "el"
$text =~ s/el/EL/g;
print "ej2: $text\n\n";
# convierte a minúsculas
$text =~ tr/[A-Z]/[a-z]/;
print "ej3: $text\n\n";
Ejemplos (2)
# borra las vocales
$text =~ tr/AEIOUaeiou//d;
print "ej4: $text\n\n";
# reemplaza secuencias no numéricas con x
$text = "2aber2333222";
$text =~ tr/[0-9]/x/cs;
print "ej5: $text\n\n";
Ejemplos (3)
# reemplaza todas las letra mayúsculas por MAYUS
$text = "De los cerros altos del sur, el de Luvina es el más
alto y el más pedregoso.";
$text =~ s/[A-Z]/MAYUS/g;
print "ej6: $text\n\n";
if($text =~ m/Luvina/){
print "Se encontró la palabra: Luvina\n";
}
Expresiones Regulares
Define un patrón que se buscará sobre alguna cadena.
Meta-símbolo
Descripción
\b
Indica límite de la palabra
\B
Fin de no palabra
\d
Cualquier dígito (0-9)
\D
Cualquier no dígito
\s
Espacio en blanco
\S
Cualquier no espacio
\t
Cualquier tabulador
\r
Retorno de carro
\n
Salto de línea
\w
Cualquier palabra, incluye ‘_’
\W
Cualquier no palabra
Expresiones Regulares (2)
Meta-símbolo
Descripción
.
Cualquier carácter, (excepto \n)
*
0 o más veces el patrón
+
1 o más veces el patrón
?
0 o 1 vez el patrón
{MIN,MAX}
Debe ocurrir al menos MIN veces pero no más de
MAX veces
{MIN,}
Debe ocurrir al menos MIN veces
{N}
Debe ocurrir exactamente N veces
* Agregar el operador ? para que el patrón no sea voraz y se obtenga el
mínimo  +?
Expresiones Regulares (3)
Posición
^
Descripción
1. Indica inicio de la cadena
2. Negación dentro de una clase de caracteres
$
Indica fin de la cadena
Generales:
| : alternativas entre varias
m/el|los|las/
( ) : agrupamiento
se hace referencia al grupo
por medio de $1, $2, ..$9
[ ] : clase de caracteres
m/(el|un) perro/
m/[A-Z]/
m/[^aeio]/
*no contenga
a,e,i,o
Ejemplo
# Elimina espacios al inicio de la línea
$text = "
El perro comió la torta";
$text =~ s/ ^\s+//g;
 "El perro comió la torta"
# encuentra las posiciones del artículo ‘el’ dentro del texto
$text = "De los cerros altos del sur, el de Luvina es el más alto y el
más pedregoso.";
while($text =~ m/\bel\b/gi){
printf " 'el' en pos: %d\n" , pos($text)-1;
}
Ejemplo2
# Identifica los artículos indefinidos de un texto
while($linea = <>){
if ($linea =~ m/\bun(o|a)?\b|\bun[oa]s\b/){
print "contiene art. indef.[un, uno, unos, unas]";
}
}
Ejemplo con agrupaciones
print "Invierte el par de palabras capturadas\n";
while($linea = <>){
if ($linea =~ m/^((\w+) (\w+))$/){
print "$3- $2";
# grupo1 = $1
}
}
Ejercicios
• Imprimir todas las líneas que empiecen con una
palabra en mayúsculas
• Imprimir todas las líneas que empiecen con algún
artículo
Descargar