Perl/Istruzioni particolari su blocchi o etichette

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.

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

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)

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)