Conferencia 4

28
Lenguaje Perl Dr. Orestes Febles Díaz Conferencia 4

Transcript of Conferencia 4

Page 1: Conferencia 4

Lenguaje Perl

Dr. Orestes Febles Díaz

Conferencia 4

Page 2: Conferencia 4

Introducción

•Solución a la Prueba Práctica.

•Entrada y Salida

•Subrutinas

Temas generales

Page 3: Conferencia 4

Introducción

•Deben ser capaces de crear subrutinas

usando la sintaxis del lenguaje PERL.

Objetivos

Page 4: Conferencia 4

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

Page 5: Conferencia 4

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

Page 6: Conferencia 4

IntroducciónSolución

Page 7: Conferencia 4

IntroducciónElementos Anteriores

•Open

•Close

•Split

•Filehandles

•Loops

Page 8: Conferencia 4

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

Page 9: Conferencia 4

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

Page 10: Conferencia 4

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

Page 11: Conferencia 4

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

Page 12: Conferencia 4

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

Page 13: Conferencia 4

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.

Page 14: Conferencia 4

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.

Page 15: Conferencia 4

IntroducciónSubrutinas

Para ejecutar una subrutina hay que invocarla

por su nombre, y si fuera necesario sus

parámetros.

Page 16: Conferencia 4

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

}

Page 17: Conferencia 4

IntroducciónDefiniendo una subrutinas

&marino;

&marino;

&marino;

&marino;

Page 18: Conferencia 4

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.

Page 19: Conferencia 4

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;

Page 20: Conferencia 4

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.

Page 21: Conferencia 4

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

Page 22: Conferencia 4

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.

Page 23: Conferencia 4

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?

Page 24: Conferencia 4

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 }

}

Page 25: Conferencia 4

IntroducciónMayor

print &max(3, 5, 10, 4, 6);

sub max {

my($mayor) = shift @_;

foreach (@_) {

if ($_ > $ mayor) {

$ mayor = $_;

}

}

$ mayor;

}

Page 26: Conferencia 4

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)

}

Page 27: Conferencia 4

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.

Page 28: Conferencia 4

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