Perl/Istruzioni particolari su blocchi o etichette

Wikibooks, manuali e libri di testo liberi.
Indice del libro


Come anticipato precedentemente le etichette risultano particolarmente utili con le istruzioni particolari last, redo, next. Queste modificano l'esecuzione del programma "saltando" opportunamente all'interno di un blocco/etichetta.

In realtà queste non sono istruzioni ma parole chiave. La differenza verrà spiegata più avanti.

Last[modifica]

Questa istruzione consente di terminare "prematuramente" un blocco o una etichetta.

last ;             # usato un blocco
last <ETICHETTA>;  # indica di uscire rispetto quale etichetta
NOTA
Dato che l'uscita prematura da un blocco avviene a seguito di una scelta , si consiglia di leggere quanto riguarda le decisionali e i cicli per poter comprendere meglio gli esempi.

Vediamo questo esempio:

my $b = 15;
my $stop = 17;
 
ETICHETTA_TRE : while ( $b < 20 )
                {
                    print " etichetta tre (b=$b)\n"; 
                    $b++;
                    if ( $stop == $b ) { last ETICHETTA_TRE; }
                }
print "b=$b\n";

che produce:

etichetta tre (b=15)
etichetta tre (b=16)
b=17

Redo[modifica]

Questa istruzione consente di ritornare allo stesso punto di quando è iniziata l'ultima iterazione.

redo ;             # usato un blocco
redo <ETICHETTA>;  # indica su quale etichetta
NOTA
Dato che l'uscita prematura da un blocco avviene a seguito di una scelta , si consiglia di leggere quanto riguarda le decisionali e i cicli per poter comprendere meglio gli esempi.

Vediamo questo esempio:

my $b = 15;
my $stop = 17;
my $ripetizioni=2;
 
ETICHETTA_TRE : while ( $b < 20 )
                {
                    print "etichetta tre (b=$b , r=$ripetizioni)\n"; 
                    if ( $stop == $b and $ripetizioni > 0) { $ripetizioni--; redo ETICHETTA_TRE; }
                    $b++;
                }

che produce :

etichetta tre (b=15 , r=2)
etichetta tre (b=16 , r=2)
etichetta tre (b=17 , r=2) # primo   redo
etichetta tre (b=17 , r=1) # secondo redo
etichetta tre (b=17 , r=0)
etichetta tre (b=18 , r=0)
etichetta tre (b=19 , r=0)

Next[modifica]

Questa istruzione consente di "saltare" all'elemento successivo.

next ;             # usato un blocco
next <ETICHETTA>;  # indica su quale etichetta
NOTA
Dato che l'uscita prematura da un blocco avviene a seguito di una scelta , si consiglia di leggere quanto riguarda le decisionali e i cicli per poter comprendere meglio gli esempi.

Vediamo questo esempio:

my $b = 15;
my $stop = 17;
my $ripetizioni=2;

ETICHETTA_TRE : while ( $b < 20 )
               {
                    $b++;
                    if ( $stop < $b and $ripetizioni > 0) { $ripetizioni--; next ETICHETTA_TRE; }
                    print " etichetta tre (b=$b , r=$ripetizioni)\n";
               }

che produce :

etichetta tre (b=16 , r=2)
etichetta tre (b=17 , r=2)
etichetta tre (b=20 , r=0)