ALFA Laboratorio
Víctor J. Díaz Madrigal (
[email protected]) Departamento de Lenguajes y Sistemas Informáticos Sevilla, 2006
Víctor J. Díaz Madrigal
ALFA, 2006-2007
ÍNDICE
Lenguaje de programación Perl • • • •
Víctor J. Díaz Madrigal
INTRODUCCIÓN TIPO ESCALAR EXPRESIONES REGULARES (EXPREGs) LISTAS
ALFA, 2006-2007
INTRODUCCIÓN: Hola, mundo Edición del script hola.pl
Características generales de Perl
Víctor J. Díaz Madrigal
Ejecución del script hola.pl
Lenguaje multiplataforma y de distribución gratuita Lenguaje imperativo y de formato libre Las sentencias acaban con punto y coma Las sentencias se ejecutan en el orden en el que aparecen en el fuente Los comentarios empiezan con # y acaban con la línea Programación basada en scripts (guiones)
ALFA, 2006-2007
TIPO ESCALAR: Definición Números
Escalares (Números y cadenas)
12
Cadenas
-5.4
"Hola, $nombre!\n"
'Hola, $nombre!\n'
Declaración por defecto con ámbito global (En id se distingue entre mayúsculas y minúsculas) Variables
$id
Inicialización por defecto:
undef
Según el contexto será el número 0 o la cadena vacía ""
Interpolación de variables dentro de literales cadenas enmarcadas entre dobles comillas "..."
# escalares.pl Sentencia de asignación $autor="Richard Wagner"; $ciudad="Leipzig"; $operas=11; $nace=1813; $muere="1883";
$id =EXPRESION; Operadores para números Suma
+
Resta
-
Producto
*
División
/
Modulo
%
Potencia
**
print "$autor nace en $ciudad\n"; print "Compuso $operas operas\n"; print "Vivió ",$muere-$nace," años\n";
[temperaturas.pl] Convierta una temperatura F medida en grados Fahrenheit a otra C medida en grados Celsius [Nota: C=5(F-32)/9] Víctor J. Díaz Madrigal
ALFA, 2006-2007
TIPO ESCALAR: Condiciones Sentencia Condicional
Expresiones Lógicas
if (COND) {BLOQUE} [ [elsif (COND) {BLOQUE}]*
else {BLOQUE} ]
SENTENCIA if COND;
Valor Falso "0"
""
0
Conjunción undef
Operadores Relacionales Números
&&
and
Disyunción ||
or
Negación !
not
# condiciones.pl Cadenas
Mayor que
>
gt
Menor que
<
lt
Igual que
==
eq
Mayor o igual
>=
ge
Menor o igual
=0) && ($n%2==0)) { print "$n es positivo y par\n" } else { print "$n es negativo o impar\n" } $u="Aire"; $v="Aria"; print "La cadena $u "; print "NO " if ($u ge $v); print " precede a la cadena $v\n";
[raices.pl] Indique de qué tipo son las raíces de una ecuación de segundo grado ax2+bx+c=0. Muestre, si es posible, sus raíces reales. Nota: Use la función sqrt() para calcular la raíz cuadrada Víctor J. Díaz Madrigal
ALFA, 2006-2007
TIPO ESCALAR: Bucles y rupturas Bucle while Bucle for
Rupturas
while (COND) {BLOQUE}
SENT while COND;
for (INICIO; COND_FIN; SIGUIENTE) {BLOQUE}
die ($mensaje)
Cesa la ejecución e imprime $mensaje
Acaba el bucle
last [COND]
exit($código)
Cesa la ejecución y devuelve $código
Siguiente iteración
next [COND]
# bucles.pl
Operadores incremento/decremento
$n= 4; die ("El argumento no es un entero estrictamente positivo\n") if ($n 1, dos => 2, tres =>3)
Mapas Listas de pares de escalares clave-valor (la clave es una cadena y el valor un escalar)
Variables Acceso al valor asociado a $clave
OJO : El valor de una clave no creada es por defecto undef
%mapa $mapa{$clave}
# mapas.pl %operas =(Bartok => 1, Falla=> 1, Brahms => 0); foreach $autor (keys %operas) { print "$autor compuso $operas{$autor} operas\n"; }
Proyección keys (%mapa)
delete($operas{Falla}); Supresión de una par delete($mapa{$clave}) Existencia de una par exists($mapa{$clave})
if (!exists($operas{Berg})) { $operas{Berg}=2; } foreach $autor (keys %operas) { print "$autor compuso $operas{$autor} operas\n"; }
[conjunto.pl] Elimina los elementos repetidos de una lista Víctor J. Díaz Madrigal
ALFA, 2006-2007
LISTAS: Ordenación de arrays Ordena lexicográficamente los elementos de ARRAY
Cambio del criterio de comparación
sort {BLOQUE} (ARRAY)
Operador de comparación
Números
Variables de comparación
$a
Invierte el orden de los elementos de ARRAY
Cadenas
cmp
$b
reverse(ARRAY)
# sort.pl @coro=("Soprano", "Contralto", "Tenor","Bajo"); foreach $c (@coro) {print "$c\n";} @ordenada=sort(@coro); print "Orden ascendente: @ordenada\n"; @ordenada_por_longitud=sort {length($a) length($b); } @coro; print "Ordena por longitud de cadena: @ordenada_por_longitud\n"; @invertida=reverse sort(@coro); print "Orden descendente: @invertida\n";
[maximo.pl] Calcula el máximo de un array de números Víctor J. Díaz Madrigal
ALFA, 2006-2007