HTMLpointHTMLpoint HTMLpoint.com


 Blocchi



Todos estos bloques pueden, obviamente, reagruparse:

  • if ejecuta el test de una condición y actúa en consecuencia en función de la verdad o no de ésta.

    La sintaxis es:

    if (condición) {
    cosas;
    que;
    hacer;
    } elsif (condición2) {
    otras;
    cosas;
    que;
    hacer;
    } else {
    otro;
    todavía;
    }


    Este ejemplo habla por sí solo: el perl hace un test de la primera condición, y si ésta es verdadera ejecuta el bloque. Si es falsa, pasa a elsif y examina la segunda condición: si es verdadera, ejecuta el bloque. Si ninguna de las precedentes es verdadera, pasa al else.

    Un ejemplo ulterior:

    print "Elige un número\n";
    $num=<STDIN>;
    if ($num == '0') {
    print "Has presionado 0\n";
    } elsif ($num == '1') {
    print "Has presionado uno\n";
    } elsif ($número == '2') {
    print "Has presionado dos\n";
    } elsif ($num == '3') {
    print "Has presionado tres\n";
    } else {
    print "No has presionado ni cero ni uno ni dos ni tres!\n";
    }


    Está claro, ¿no? Hemos elegido poner un ejemplo tan largo para demostrar que puede haber perfectamente más de un elsif: aquí hay tres, y habrían podido ser muchos más, sin un techo máximo; sin embargo sólo puede haber un else y un if, siempre que no estén concatenados:

    if (condición) {
    if (condición2) {
    haz esto;
    }
    haz esto otro;
    }

    El ejemplo anterior funciona, pero es totalmente distinto del precedente: éste se lee como " si sucede cierta cosa (condición) y si sucede otra (condición2) .....", no es una serie de alternativas como el ejemplo de los tres elsif.
    No es necesario introducir un elsif() o un else(); la estructura también puede ser simple como:

    if (condición) {
    cosas_que_hacer;
    }


    o bien:

    if (condición) {
    cosas_que_hacer;
    } else {
    otras_cosas;
    }


    Las {} son siempre necesarias en estas construcciones. Un modo para sintetizar al máximo el ejemplo:

    if (condición) {
    cosas_que_hacer;
    }


    es

    cosas_que_hacer if condición;

    Ejemplo:

    if ($cmd eq 'ECHO') {
    &print($args);
    } elsif ($cmd eq 'CLEAR' || $cmd eq 'CL) {
    print $cls if $ansi;
    print "`#ssfe#l\n" if $ssfe;
    }

  • unless hace las mismas cosas que if, sólo que invierte el resultado del test.

    print "No es uno\n" unless $number ==1;

  • while Repite un loop hasta que una condición es verdadera. Un ejemplo puede ser:

    #!/usr/local/bin/perl
    print STDERR "nombre del file: ";
    $nombre_del_file = <STDIN>;
    open(FILE, "< $nombre_del_file");
    while (!eof(FILE)) {
    $raya = <FILE>;
    print "$raya";
    }

    Este script no hace otra cosa que pedirnos el nombre del file que hay que abrir y, mientras no llegue al final (la condición 'while(!eof(FILE)'), lo muestra en la pantalla.

    until Repite un loop mientras una condición sea falsa.

    La sintaxis es:

    until (condición) { # se puede sustituir con while por tener la
    # condición opuesta
    cosas;
    que;
    hacer;

    }
    Esta construcción hace un test de la condición, y si es verdadera ejecuta todo lo que está contenido en {}, después ejecuta un nuevo test sobre la condición, etc., mientras la condición siga siendo falsa.

    Dentro del bloque, puede haber otros 2 comandos útiles:

  • next skippa el resto del bloque y va directamente a volver a hacer un test de la condición.

  • last skippa el resto del bloque y sale:

    $i = 0;
    while ($i < 18) {
    print "$i ";
    $i++;
    }
    print "\n";

    $i = 0;
    while ($i < 18) {
    next if $i == 4;
    print "$i ";
    $i++;
    }
    print "\n";


    También aquí se puede usar la sintaxis.

    haz_algo while condición

  • foreach Ejecuta determinadas operaciones sobre cada valor de cada lista/array.
    La sintaxis es:

    foreach $variable (array o escalar) {
    haz_algo;
    haz_cualquier otra cosa;
    }


    Como siempre, $variable no es indispensable y, si ésta no se especifica, se utilizará $_ Los argumentos entre () pueden ser un array, más array o una lista de variables, o llamadas de funciones que restituyen valores, o una mezcla de todo esto.

    Todos estos escalares y array son enviados a un array (como haz push() ), después de lo cual viene ejecutado el bloque entre {} para cada valor.

    Cuidado: si el código entre {} modifica el valor de una variable, también en el array el valor será modificado.

    Como con while/until, también con foreach se puede utilizar last y next.

    @bla = ("ick", 3, "arr", "bleargh");
    %eek = (10, "no", 5, "yes", 7.5, "maybe");

    foreach (@bla, keys(%eek), "heh") {
    print "|", $_, "| ";
    }
    print "\n"; # Muestra
    # "|ick| |3| |arr| |bleargh| |10| |5| |7.5| |heh|"

    foreach (@bla, keys(%eek), "heh") {
    $_ = "bla" if $_ == 3;
    }
    print join(":", @bla)."\n"; # Muestra "ick:3:arr:bleargh"

    foreach $i (@bla) {
    $i = "bleh" if $i == 3;
    }
    print join(":", @bla)."\n"; # Muestra "ick:bleh:arr:bleargh"


  • for Puede utilizarse como sinónimo de foreach, sólo que la sintaxis resulta más clara:

    for (statement1; condición, statement2) {
    cosas;
    que;
    hacer;
    }

    for ($i = 0; $i < 18; $i++) {
    print "$i ";
    }
    print "\n";

    for ($i = 0; $i < 18; $i++) {
    next if $i == 4;
    print "$i ";
    }
    print "\n";



  •   Torna a inizio pagina