Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Blocchi

Esempi e liste di blocchi.
Esempi e liste di blocchi.
Link copiato negli appunti

Tutti questi blocchi possono ovviamente essere raggruppati:

  • if esegue il test di una condizione, e agisce in conseguenza della verità o meno di questa.

    La sintassi è:

    if (condizione) {
    cose;
    da;
    fare;
    } elsif (condizione2) {
    altre;
    cose;
    da;
    fare;
    } else {
    altro;
    ancora;
    }

    Questo esempio parla da solo: il perl testa la prima condizione, se questa è vera esegue il blocco. Se questa è falsa, passa a elsif ed esamina la seconda condizione: se è vera esegue il blocco. Se nessuna delle precedenti è vera, passa all'else.

    Un ulteriore esempio:

    print "Scegli un numeron";
    $num=<StdIN>;
    if ($num == '0') {
    print "Hai premuto 0n";
    } elsif ($num == '1') {
    print "Hai premuto unon";
    } elsif ($numero == '2') {
    print "Hai premuto duen";
    } elsif ($num == '3') {
    print "Hai premuto tren";
    } else {
    print "Non hai premuto nè zero nè uno nè due nè tre!n";
    }

    Chiaro, no?? Abbiamo scelto di fare l'esempio così lungo per dimostrare che ci possono essere benissimo più di un elsif: qui ce ne sono ben tre, ed avrebbero potuto essere molti di più, senza un tetto massimo; invece vi può essere solamente un else ed un if, almeno che non siano concatenati:

    if (condizione) {
    if (condizione2) {
    fai questo;
    }
    fai quest'altro;
    }

    L'esempio sopra funziona, ma è totalmente diverso dal precedente: questo si legge come " se succede una certa cosa (condizione) e se ne succede un'altra (condizione2) .....", non è una serie di alternative come l'esempio dei tre elsif.
    Non è necessario introdurre un elsif() o un else(); la struttura può anche essere semplice come:

    if (condizione) {
    cose_da_fare;
    }

    oppure:

    if (condizione) {
    cose_da_fare;
    } else {
    altre_cose;
    }

    Le {} sono sempre necessarie in questi costrutti. Un modo per sintetizzare al massimo l'esempio:

    if (condizione) {
    cose_da_fare;
    }

    è

    cose_da_fare if condizione;

    Esempio:

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

  • unless fa le stesse cose di if, solo che rovescia il risultato del test.

    print "Non è unon" unless $number ==1;

  • while Ripete un loop finchè una condizione è vera Un esempio può essere:

    #!/usr/local/bin/perl
    print StdERR "nome del file: ";
    $nome_del_file = <StdIN>;
    open(FILE, "< $nome_del_file");
    while (!eof(FILE)) {
    $riga = <FILE>;
    print "$riga";
    }

    Questo script non fa altro che chiedervi il nome del file da aprire, e, finchè non arriva alla fine (la condizione 'while(!eof(FILE)'), visualizza sullo schermo.

    until Ripete un loop finchè una condizione è falsa.

    La sintassi è:

    until (condizione) { # si può sostituire con while per avere la
    # condizione opposta
    cose;
    da;
    fare;
    }

    Questo costrutto testa la condizione, e se è vera esegue tutto ciò che è contenuto in {}, poi esegue un nuovo test sulla condizione e così via finchè la condizione è falsa.

    All'interno del blocco, ci possono essere altri 2 utili comandi:

  • next skippa il resto del blocco e va direttamente a ri-testare la condizione.
  • last skippa il resto del blocco e ne esce:

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

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

    Anche qui si può utilizzare la sintassi.

    fai_qualcosa while condizione

  • foreach Esegue determinate operazioni su ogni valore di ogni lista/array.
    La sintassi è:

    foreach $variabile (array o scalare) {
    fai_qualcosa;
    fai_qualcos'altro;
    }

    Come sempre, $variabile non è indispensabile, e, se questa non è specificata, verrà utilizzata $_
    Gli argomenti tra () possono essere un array, più array o una lista di variabili, o chiamate di funzioni che restituiscono valori, o un misto di tutto questo.

    Tutti questi scalari e array sono spediti in un array (come fa push() ), dopo di che viene eseguito il blocco tra {} per ogni valore.

    Attenzione: se il codice tra {} modifica il valore di una variabile anche il valore nell'array verrà modificato.

    Come con while/until, anche con foreach è possibile utilizzare last e next.

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

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

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

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

  • for Può essere utilizzato come sinonimo di foreach, solo che la sintassi risulta più chiara:

    for (statement1; condizione, statement2) {
    cose;
    da;
    fare;
    }

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

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

Ti consigliamo anche