8 – Perl
This presentation is the property of its rightful owner.
Sponsored Links
1 / 38

Programación II PowerPoint PPT Presentation


  • 60 Views
  • Uploaded on
  • Presentation posted in: General

8 – Perl. Programación II. Ing. Diego J. Arcusin [email protected] Introducción. Perl - "Practical Extraction and Report Language“ Es un lenguaje surgido de otras herramientas UNIX como sed, grep, awk y los Shells.

Download Presentation

Programación II

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Programaci n ii

8 – Perl

Programación II

Ing. Diego J. Arcusin

[email protected]


Introducci n

Introducción

  • Perl - "Practical Extraction and Report Language“

  • Es un lenguaje surgido de otras herramientas UNIX como sed, grep, awk y los Shells.

  • Sirve principalmente para el procesamiento de texto y para programación en general.

  • Actualmente se encuentra consolidado como uno de los lenguajes más utilizados para el desarrollo de aplicaciones para la Web.

  • Para correr un programa perl:

    perl –e ‘print “Hola Mundo\n”;

    perl programaperl.pl

  • Para visualizar los warnings se utiliza la opción -w


Primer programa

Primer Programa

$ cat miprograma.pl

#!/usr/bin/perl -w

# Este es mi primer programa en perl

use strict;

print "Hola, Mundo!\n";

  • La primera línea indica la ruta al intérprete perl.

  • La segunda incorpora un comentario. Todo lo que se encuentre a la derecha de “#” será ignorado por el intérprete.

  • La tercera línea exige que todas las variables sean declaradas. (Recomendable para programar mejor).

  • La tercera línea imprime Hola, Mundo! y un caracter nueva línea.

  • En general todas las líneas de un programa deben finalizar con el caracter “;”.

  • Si al programa se le dan permisos de ejecución, el mismo se puede ejecutar directamente. Por ejemplo:

    $ ./miprograma.pl


Variables

Variables

Escalares (Scalars).

  • Los escalares son variables del tipo “Número” o “Cadena”, comienzan siempre con el caracter “$”. Por ejemplo:

    $minumero = 1;$mitexto = ‘Hola Mundo’;

  • Para declarar variables (Escalar o de cualquier otro tipo) se utiliza “my”. Por ejemplo:my $contador = 1;

  • El operador es quien determina si el escalar es un número o una cadena.

  • Para “parsear” el valor de un Escalar se utiliza comillas dobles. Por ejemplo: my $total = 100;print “El valor es $total”;# Despliega: El valor es 100

  • Para evitar el parseo de un Escalar se utilizan comillas simples.Por ejemplo:my $total = 100;print ‘El valor es $total’;# Despliega: El valor es $total


Variables cont

Variables (cont.)

Arreglos (Arrays).

  • Son vectores de Escalares.

  • Comienzan con el caracter [email protected] Por ejemplo:

    my @nombres;

    $nombres[0]=‘Carlos’;

    $nombres[1]=‘María’;

    $nombres[2]=‘Juan’;

    $nombres[3]=‘Laura’;

  • Si bien @nombres es un array, cada uno de sus elementos es un escalar. Por eso cada una de las asignaciones empieza con “$”.

  • Otra forma de asignar el arreglo es:my @nombres = (‘Carlos’, ‘María’, ’Juan’, ‘Laura’);

  • En el ejemplo anterior se utiliza un Lista para asignar al array sus valores. Un List es una lista de uno o más escalares, separados por coma.


Variables cont1

Variables (cont.)

  • La función “push” permite agregar valores a un arreglo y recibe como parametros un array y una lista: push ARRAY, list. Por ejemplo:push @nombres, (‘Pedro’, ‘Marcela’, ‘Oscar’);

  • Un arreglo entre paréntesis actúa como una lista. Por ejemplo:@nombres = (@familiares, @amigos, @otros);

  • Un arreglo también permite asignar valores a una lista. Por ejemplo:($papa, $mama, $tio, $tia) = @nombres;

  • El tamaño del array se obtiene asignando el array a un escalar. Por ejemplo:my $cantarray = @nombre;


Variables cont2

Variables (cont.)

Hashes (Arreglos Asociativos)

  • Son como arreglos de Escalares pero utilizando una cadena para sus índices (llamadas KEYS) en lugar de un número.

  • Comienzan con un “%”.

  • Los Hashes utilizan { } para encerrar cada KEY, a diferencia de los [ ] utilizados en los arreglos.

  • A diferencia de los arreglos, un Hash no puede ser interpretado como un lista. Por lo que no se puede utilizar como argumento de la función push.

  • Cada elemento de un HASH consiste de un KEY y un VALUE

  • Para acceder a lista de los indices de un HASH se utiliza la función keys.


Variables cont3

Variables (cont.)

my %cenas;

$cenas{‘Lunes’}=‘Pollo’;

$cenas{‘Martes’}=‘Carne’;

$cenas{‘Miercoles’}=‘Ensalada’;

$cenas{‘Jueves’}=‘Arroz’;

$cenas{‘Viernes’}=‘Pasta’;

# Para desplegar todos los keys en una sola línea:

print keys %cenas, “\n”

# Para ver los pares uno por uno

foreach my $dia (keys %cenas) {

my $comida = $cenas{$dia};

print “El dia $dia como $comida.\n”;

}

  • Si bien %cenas es un HASH, cada uno de sus valores es un escalar. Por eso al asignarlo se utiliza el caracter “$”.


Variables cont4

Variables (cont.)

  • Un asignación de Hash mas legible.

    my %cenas = (

    lunes => ‘Pollo’,

    Martes => ‘Carne’,

    Miercoles => ‘Ensalada’,

    Jueves => ‘Arroz’,

    Viernes => ‘Pasta’,

    );

  • La última asignación puede o no terminar con ,


Subrutinas y funciones

Subrutinas y Funciones

  • No existen diferencias sustanciales entre una subrutina (definida por el programador) y una función (predefinida en PERL).

  • En forma opcional las subrutinas pueden ser invocadas con un &.

  • El tipo de dato de la subrutina / función está dado por el valor que devuelve dicha subrutina / función.

  • Las subrutinas empiezan con la palabra “sub”, y el valor se devuelve con la instrucción “return”.

  • Los argumentos recibidos por la subrutina se encuentran en el Array @_

  • También se pueden obtener los argumentos de a uno mediante la instrucción “shift”.

  • Ejemplos:# Esta subrutina devuelve un escalar.sub ReturnScalar {

    my $first_argument = shift;

    return "El argumento es: $first_argument";

    }


Subrutinas y funciones cont

Subrutinas y Funciones (cont.)

  • Ejemplos:# Esta subrutina devuelve un Array.sub ReturnArray {

    my $array_size = shift;

    my @array = ();

    for (my $i=0; $i < $array_size; $i++ )

    { $array[$i] = “El valor es $i”; }

    return @array;

    }

    # Esta Rutina recibe tres argumentos y los muestra

    sub MuestraTresArgs {

    my ($arg2, $arg2, $arg3) = @_;

    print “Los valores son: $arg1 - $arg2 - $arg3”;

    }


Subrutinas y funciones cont1

Subrutinas y Funciones (cont.)

  • Ejemplos de uso de subrutinas:# Ejemplo de Uso de ReturnScalarprint "Scalar:\n"; print ReturnScalar('test 1'), "\n", ReturnScalar('test 2'), "\n";

  • # Ejemplo de Uso de ReturArrayprint "Array:\n";

    my @test_array = returnArray(5);

    for (my $i = 0; $i <= @test_array - 1; $i++)

    { print "$test_array[$i]\n"; }

  • Cuando se corre un programa desde la línea de comandos, se puede interpretar como una subrutina.La única diferencia es que se usa el array @ARGV en vez de @_ para la recepción de los parámetros de la línea de comandos.


References

References

  • Los References en Perl son como los punteros en C.

  • Apuntan a una dirección de memoria donde se almacena el valor de una variable.

  • Si bien se pueden hacer referencias a cualquier tipo de variable, la referencia en si se trata siempre como un Escalar por lo que comienzan con $.

  • Para crear una referencia a una variable se usa.

  • Ejemplos:

    # Crear referencias

    my $scalar = 'hola';

    my $scalar_ref = \$scalar;

    print "Scalar: $$scalar_ref\n";


References cont

References (cont.)

my @arr = (1, 2, 3);

my $arr_ref = \@arr;

print "Array: @$arr_ref\n";

my %hash = (

nombre => 'Carlos',

apellido => 'Sanchez',

edad => 25,

);

my $hash_ref = \%hash;

print "Hash size: ", scalar(keys %$hash_ref), "\n";

  • Una subrutina que devuelve un array o un hash muy grande es ineficiente. Es más eficiente devolver una referencia al array o al hash.


References cont1

References (cont.)

  • Se puede crear una referencia a una lista usando [ ]en lugar de ( ). Por ejemplo:

    # Referencia a una lista

    my $ref_a_arreglo = [ 'a0', 'a1', 'a2' ];

    print "$ref_a_arreglo->[1]\n";

  • Mediante esta técnica se pueden implementar arreglos multidimensionales.

    # Referencia a una lista de listas (o sea, un array multi-dimension)

    my $ref_a_multi_arreglo = [

    [ 'a0', 'a1', 'a2' ],

    [ 'b0', 'b1', 'b2', 'b3' ],

    [ 'c0', 'c1', 'c2' ],

    ];

    # Desplegar elemento (1,3) = 'b3'

    print "$ref_a_multi_arreglo->[1][3]\n";


Verdadero falso

Verdadero / Falso

  • En Perl los valores verdadero y falso se evalúan siempre como un Escalar y mediante las siguientes reglas:

    • Una cadena siempre es verdad, menos las cadenas “” y “0”

    • Un número siempre es verdad, menos el número 0

    • Una referencia siempre es verdad

    • Un valor no definido siempre es falso

  • Ejemplos:

    0 # Como la cadena "0" - falso

    1 # Como la cadena "1" - verdad

    10 - 10 # Igual a 0, como la cadena "0" - falso

    0.00 # Como número evalua a 0, como la cadena "0" - falso

    "0.00" # No igual a la cadena "0" - verdad

    "0.00" + 0 # Evalua a 0 - falso

    "" # NULL - falso

    \$ref # Una referencia contiene la dirección adonde apunta,

    # siempre <> 0 - verdad

    undef() # Devuelve un valor no definido - falso


Operadores

Operadores

Numéricos

  • Iguales a los de cualquier lenguaje: + - * / % **

  • Ejemplos:

    • $a = 1;

    • $b = '3' + $a; # $b = 4

    • $b *= 5; # $b = 20

    • $c = $b % 3; # $c = 2

    • $d = $b ** 2; # $d = 400


Operadores cont

Operadores (cont.)

Cadenas

  • $a = ‘Hola Mundo’;

  • $b = ‘Que tal?’;

  • $c = $a . ‘ ‘ . $b # $c = “Hola Mundo Que tal?”

    # El operador “.” concatena

  • $d = ‘chau ’;

  • $e = $dx 4; # $e = “chau chau chau chau ”

    # El operador x copia n instancias de la cadena


Operadores cont1

Operadores (cont.)

Lógicos

  • “||” o “or”# Operador lógico “o”

  • “&&” o “and”# Operador lógico “y”

  • “!” o “not”# Operador lógico “no”

  • Los operadores de C && || !son iguales de los más legibles and, or, not.La única diferencia es que and, or y not tienen menor precedencia al momento de la evaluación.

  • al igual que en cualquier lenguaje para forzar la precedencia en la evaluación lógica se utilizan los paréntesis.

    Incremento y Decremento

  • “++” o “- -”

  • $b = $a ++; # Esto es lo mismo que $b = $a; $b = $b + 1;

    Comparación

  • == != < > <= >=# Operadores aplicables a números

  • eq ne lt gt le ge# Operadores aplicables a cadenas.


Operadores cont2

Operadores (cont.)

Ejemplos de Operadores Lógicos

$a = '0';

$b = $a || 2;# Como $a evalúa a "0" (falso),

# se evalúa la parte derecha de ||, $b = 2

$b = ($a || 2); # Igual que el ejemplo anterior (paréntesis opcionales)

$b = ($a or 2); # Igual que el ejemplo anterior (paréntesis requeridos)

$a = '3';

$b = $a || 2; # Como $a evalúa a "3" (verdad),

# se ignora la parte derecha de ||, $b = 3

$b = ($a || 2); # Igual que el ejemplo anterior

$b = ($a or 2); # Igual que el ejemplo anterior

$a = '0';

$b = $a && 2; # Como $a evalúa a "0" (falso),

# se ignora la parte derecha de &&, $b = 0

$b = ($a && 2); # Igual que el ejemplo anterior

$b = ($a and 2); # Igual que el ejemplo anterior

$a = '3';

$b = $a && 2; # Como $a evalúa a "3" (verdad),

# se evalúa la parte derecha de ||, $b = 2

$b = ($a && 2); # Igual que el ejemplo anterior

$b = ($a and 2); # Igual que el ejemplo anterior


Operadores cont3

Operadores (cont.)

Ejemplos de Operadores Incremento y Decremento

$a = 1;

$b = $a++; # $a=2, $b=1

$c = ++$a; # $a=3, $c=3

$d = 5;

$e = $d--; # $d=4, $e=5

$f = --$d; # $d=3, $e=5, $f=3


Control de flujo

Control de Flujo

Condiciones

  • if, else, elsif, unless, while, until

    Ejemplos:

    if ($edad < 18)

    { print "Joven\n"; }

    elsif ($edad < 65)

    { print "Adulto\n"; }

    else { print "Viejito ;-)\n"; }

    while ($contador < 1000)

    { $contador ++; }

    print “Llegue a 1000!\n";


Control de flujo condiciones

Control de Flujo - Condiciones

if, else, elsif, while

Ejemplos:

if ($edad < 18)

{ print "Joven\n"; }

elsif ($edad < 65)

{ print "Adulto\n"; }

else { print "Viejito ;-)\n"; }

while ($contador < 1000)

{ $contador ++; }

print “Llegue a 1000!\n";


Control de flujo condiciones1

Control de Flujo - Condiciones

unless, until

  • unless es la negación de if

  • until es la negación de while.

    Ejemplos:

  • unless ($edad >= 18) ... # igual que if ($edad < 18)

  • until ($contador >= 1000) ... # igual que ($contador < 1000)

    Perl también permite incorporar condiciones de la siguiente forma:

  • print "Hoy es lunes\n" if ($weekday eq 'lunes');


Control de flujo loops

Control de Flujo - loops

for

  • Se utiliza para obtener un índice específico.

    Ejemplo:

    for (my $i = 0; $i <= @array; $i++)

    { if ($i == 123)

    {print “Este es el elemento 123\n";}

    }


Control de flujo loops1

Control de Flujo - loops

foreach

  • El foreach se utiliza para procesar todo los elementos de un array o un hash.

    Ejemplo:

    foreach my $dia (keys %cenas) {

    my $comida = $cenas{$dia};

    print “El dia $dia como $comida.\n”;

    }


Control de flujo loops2

Control de Flujo - loops

  • En Perl el next y last son instrucciones válidas dentro de un loop foreach o for.

    Ejemplos:

    for (my $i = 0; $i <= @array; $i++)

    { # Ignore index less then 100 and index 5000

    if ($i < 100 or $i == 5000)

    {next;}

    # Exit loop when found a special case

    if ($array[$i] == '999')

    {print "Found at $i!\n"; last;}

    }


Control de flujo select case

Control de Flujo – select / case

  • Perl no cuenta con un comando tipo select o switch.Una forma posible para emular una instrucción de este tipo es:

    for ($marca)

    {

    /Mercedes/ and do { print “OK, pero caro!\n"; last; } ;

    /Volvo/ and do { print "Un poco viejo...\n"; last; } ;

    /Peugeot/and do { print "No tan mal...\n"; last; } ;

    print "El Auto $marca no conozco.\n";

    }


Archivos

Archivos

open, read, print, close

  • Ejemplo de lectura de un archivo a una variable escalar.

    open(FH, '</var/log/messages');

    read(FH, my $contents, 10000); # Leer maximo 10000 bytes

    close(FH);

    print $contents;

  • También es posible cargar el archivo en un arreglo, una linea por elemento:

    open(FH, '</var/log/messages');

    my @contents = <FH>; # Todo el archivo va al arreglo

    close(FH);

    foreach my $line (@contents)

    { print "$line"; }


Archivos cont

Archivos (cont.)

  • Para escribir a un archivo:

    open(FH, '>/tmp/test');

    print FH "Esto escribo al archivo /tmp/test\n";

    close(FH);

  • Para agregar al final de un archivo:

    open(FH, '>>/tmp/test');

    print FH "Esto agrego al final del archivo /tmp/test\n";

    close(FH);


Archivos cont1

Archivos (cont.)

  • Perl utiliza sintáxis similar al comando UNIX “test” para hacer pruebas sobre los archivos.Por ejemplo:

    if (-f $filename) ... # Verdadero si el archivo existe

    # y es u archivo regular

  • Para borrar un archivo:unlink $filename;


Expresiones regulares

Expresiones Regulares

  • $variable =~ m/ExprReg/

    Esta expresión será verdadera si se encuentra el patrón ExprReg en $variable.

  • $variable !~ m/ExprReg/

    Esta expresión será verdadera si NO se encuentra el patrón ExprReg en $variable.

  • $variable =~ s/ExprReg1/ ExprReg2/

    Se sustituye el patrón ExprReg1 por el patrón ExprReg2 en $variable.


Expresiones regulares cont

Expresiones Regulares (cont.)

Ejemplos:

my $saludo = ‘Hola que tal!';

# Match using 'm//'

if ($saludo =~ m/Hola/)

{ print “Encontré ‘Hola' en '$saludo'\n"; }

# Substitute using 's///'

$saludo =~ s/Hola/Buenas/;

if ($saludo =~ m/Hola/)

{ print “Encontré ‘Hola' en '$saludo'\n"; }

if ($salud !~ m/Hola/)

{ print “No volví a encontrar 'Hola' en '$saludo'\n"; }


Expresiones regulares cont1

Expresiones Regulares (cont.)

  • El Perl permite el uso de los siguientes metacaracteres:\ Para podear matchear a otro metacaracter. Ej: \*|O logico.

    ( )Agrupador lógico

    [ ]Opciones o intervalos de caracteres

    ^Matchea al inicio de la cadena.

    $Matchea al final de la cadena.

    *+?Operadores “cerradura”

    .Matchea una instancia de cualquier caracter.

    { }Cuantificadores.

    {n,m} Se requieren como mínimo n matches y como máximo m

    {n,} Se requieren como mínimo n matches. (Sin máximo)

    {n} Se requieren exactamente n matches.


Expresiones regulares cont2

Expresiones Regulares (cont.)

El Perl también permite el uso de los siguientes caracteres especiales:

\tTabulación

\nNueva línea

\dMatchea a un dígito. Equivalente a /[0-9]/

\DMatchea cualquier caracter que no sea un dígito

\sMatchea un caracter de espacio (espacios, tabs, nueva línea,

etc)

\Slo opuesto de \s

\wMatchea un caracter alfanumérico. Equivalente a /[a-zA-Z_0-9]/


Expresiones regulares cont3

Expresiones Regulares (cont.)

  • Los siguientes operadores se agregan al final de las instrucciones. Ejemplo: s/Hola/Chau/g

    eLa cadena de sustitución se evalúa. Permite la utilización de funciones. Por ejemplo: $variable =~ s/Rojo/&ColoralAzar()/eSustituye la cadena ‘Rojo’ por lo que devuelve la función

    ColoralAzar().

    gSustituye globalmente (todos los matches de la línea).

    iinsensitive. Matchea indistintamentemayúsculas o minúsculas.

    mmultiple. Si la cadena contiene \n trata la cadena como varias líneas.

    ssingle. Aunque la cadena contenga \n, la trata como una única líneas.

    Nota: m y s modifican el comportamiento de ^ y $.

    Ejemplos:


Preguntas

Preguntas

?


Ejercicios

Ejercicios

8.1. Desarrolle un dado en Perl qué genere números al azar entre 1 y 6. Utilice la función: rand (perldoc –f rand)

8.2. Crear un programa que pida por pantalla una línea del tipo:key1=value1luego deberá separar el key del value.Utilice: print "Ingresar: "; chomp(my $input = <STDIN>);y la función split

8.3. Desarrolle un programa que pida 5 números desde el teclado, y que los ordene en forma ascendente.Utilice las funciones push y sort


  • Login