Upload
orestes-febles-diaz
View
103
Download
0
Embed Size (px)
Citation preview
Lenguaje Perl
Dr. Orestes Febles Díaz
Conferencia 4
Introducción
•Solución a la Prueba Práctica.
•Entrada y Salida
•Subrutinas
Temas generales
Introducción
•Deben ser capaces de crear subrutinas
usando la sintaxis del lenguaje PERL.
Objetivos
Introducción
• Un estudiante universitario de 5to año tiene en este semestre 5 asignaturas (Matemáticas,
Ciencias, Historia, Perl y Java). Además tiene un listado con los nombres de los profesores
de cada una de esas asignaturas.
• a) Declare una lista asociativa que incluya las asignaturas con sus respectivas notas (del 1
al 100).
• b) Declare un arreglo con los nombres de los profesores de las 5 asignaturas.
• c) Si la nota de Perl es menor que 60 y el profesor de Java contienen una “p” en su nombre
agregar al final del listado de profesores la cadena “Aprobado”.
• d) Si la longitud del nombre del profesor de Historia no es igual a 7 agregarle la cadena
“Incompleto” al inicio del listado de profesores.
• e) Imprima la lista de profesores ordenada alfabéticamente.
Bat A
Introducción
• La liga española de futbol se ha mantenido solamente a 5 equipos (Madrid, Barcelona,
Valencia, Sevilla y Getafe). Además mantiene actualizados la lista con los 5 mejores
goleadores del torneo.
• a) Declare una lista asociativa que incluya los nombres de los equipos junto con los puntos
que llevan en lo que va de torneo.
• b) Declare un arreglo con los nombres de los goleadores de la liga.
• c) Si el Barcelona tienen menos puntos que el Madrid y Messi es el máximo goleador (el
primero en la lista), se debe eliminar el último nombre en la lista de goleadores.
• d) Si el nombre del máximo goleador tienen más de 10 caracteres, se debe insertar un
nombre entrado por el usuario (por consola) al inicio del listado de goleadores.
• e) Imprima la lista de goleadores a la inversa.
Bat B
IntroducciónSolución
IntroducciónElementos Anteriores
•Open
•Close
•Split
•Filehandles
•Loops
Introducción
open(PUNTERO, "modo de acceso + nombre de archivo");
Donde:
nombre de archivo -> puede tener cualquiera de los prefijos
definidos , estos prefijos indican el modo de acceso al
archivo (si no se pone ningún prefijo es que se toma el modo
de acceso por defecto que es el de lectura)
Open
Introducción
open(IN, "data.txt");
open(OUT, ">out.txt");
while($linea = <IN>) {
# manipula los caracteres leídos y puestos en la variable $ linea.
#Ejemplo convertir los caracteres a minúsculas
$linea =~ tr/A-Z/a-z/; # escritura del resultado
print OUT $linea;
}
close(IN);
Ejemplo
Introducción
$entrada="entrada.txt";
$salida ="salida.txt";
open (ENTRADA,"<$entrada") || die "ERROR: No puedo abrir el fichero $entrada\n";
open (SALIDA,">$salida") || die "ERROR: No puedo abrir el fichero $salida\n";
while ($linea=<ENTRADA>)
{
print SALIDA $linea;
}
close (ENTRADA);
close (SALIDA);
Copiar de un fichero a otro
Introducción
• El archivo "/etc/passwd" contiene la descripción de cada login.
Cada línea del archivo passwd está compuesta por: el nombre
que usa el usuario para entrar (login), la contraseña encriptada
(password), número que identifica al usuario (uid), número que
identifica al grupo al que pertenece el usuario (gid), información
sobre el usuario (User_Information), directorio inicial del usuario
(login_directory) y el interprete de comandos usado por dicho
usario (login_shell).
Visualizar en la consola el nombre de cada usuario y su directorio predeterminado.
login:password:uid:gid:User_Information:login_directory:login_shell
Introducción
open(PASSWD, "/etc/passwd");
while ($p = <PASSWD>) { # lee una línea del archivo
chop($p); #quitamos el salto de línea
@field = split(/:/, $p);
print " Usuario $field[0] y su directorio es $field[5]";
}
close(PASSWD);
Solución en PERL
IntroducciónEjercitación
•Declaración de listado de deportes
•Por cada deporte se pregunta al especialista si es
con balón.
•De ser cierto, se escribe ese deporte en un
fichero previamente creado en la dirección que el
usuario introdujo.
IntroducciónSubrutinas
•Una subrutina puede definirse como un programa
dentro de un programa, un subprograma.
•Es un trozo de código que tiene vida propia, con
sus propios algoritmos y sus propias variables,
que puede estar declarado dentro de otro
programa Perl, dentro de un módulo o dentro del
intérprete Perl.
IntroducciónSubrutinas
Para ejecutar una subrutina hay que invocarla
por su nombre, y si fuera necesario sus
parámetros.
IntroducciónDefiniendo una subrutinas
Para definir una subrutina se debe utilizar la palabra sub después
el segmento de código que sería el cuerpo de la subrutina.
sub marino {
$n += 1; # variable global $n
print “Hola marinero número $n!\n";
}
IntroducciónDefiniendo una subrutinas
&marino;
&marino;
&marino;
&marino;
IntroducciónSubrutinas
• Muchas veces es necesario cuando se llama a una subrutina,
realizer alguna tarea con el resultado que esta arroja.
• Las subrutinas de Perl deben en su mayoría tener algún valor
de retorno.
• Como hizo Larry?.
• Donde último se calculan datos en una subrutina…será tomado
automáticamente como retorno de la subrutina.
IntroducciónEjemplo
sub suma {
print “Hola estas sumando!\n";
$aprobados + $suspensos; # valor de retorno
}
$aprobados = 30;
$suspensos = 40;
$total= &suma; # total será 70
print .$total;
IntroducciónQue ocurre?
sub suma {
$aprobados + $suspensos; # valor de retorno
print “Hola estas sumando!\n";
}
Se debe ser cuidadoso al agregar instrucciones al final de
las subrutinas.
IntroducciónParámetros
• La subrutina suma pudiera ser mucho mejor si no trabajara
solamente con las variables globales $aprobados y
$suspensos. Sería útil el uso de parámetros para efectuar la
suma con diferentes sumandos.
• $total= &suma(10,80);
IntroducciónQue ocurre?
sub suma {
$_[0] + $_[1]; # valor de retorno
}
$total= &suma(12,7);
Perl hace posible el uso de una lista dentro de las subrutinas. Para ello utiliza
el array @_
• La variable @ es privada para la subrutina.
• Desechará parámetros sobrantes.
IntroducciónSubrutinas
• Las subrutinas pueden ser ubicadas en cualquier lugar del
programa.
• Es común que muchos programadores que usan Perl (con
influencia anterior de C o de Pascal) coloquen las subrutinas al
inicio del programa.
• La definición de las subrutinas es global.
• Cómo utilizar variables privadas dentro de las subrutinas?
IntroducciónSubrutinas
• Se pueden crear variables privadas llamadas variables léxicas
con el operador my.
sub maximo {
my($m, $n); # variables privadas
($m, $n) = @_; # asigna parámetros
if ($m > $n) { $m } else { $n }
}
IntroducciónMayor
print &max(3, 5, 10, 4, 6);
sub max {
my($mayor) = shift @_;
foreach (@_) {
if ($_ > $ mayor) {
$ mayor = $_;
}
}
$ mayor;
}
IntroducciónReturn
my @nombres= qw/ fred barney betty dino wilma pebbles bamm-bamm /;
my $resultado = &busqueda("dino", @nombres);
sub busqueda{
my($nombretemp, @lista) = @_;
foreach (0..$#lista) {
if ($nombre eq $lista[$_]) {
return $_; # retorna posicion
}
}
–1; # elemento no encontrado(retorno opcional)
}
IntroducciónEjercicio
• Clase Trabajador (POO)
• Declare una subrutina de dada una cadena si su longitud es par deje solo
la mitad de los elementos , si es múltiplo de 5 deje en la cadena solo 3
elementos.
• Declare una subrutina que sume todos los elementos de un arreglo que
recibe por parámetros.
Introducción
•PERL permite crear subrutinas que después
pueden ser utilizadas en cualquier parte del
programa.
•Permite la declaración de variables
privadas dentro de los programas.
Conclusiones