Perl/Istruzioni particolari su blocchi o etichette

Wikibooks, manuali e libri di testo liberi.


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.

[modifica] Last

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

[modifica] Redo

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=3)
etichetta tre (b=16 , r=3)
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)

[modifica] Next

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)
Strumenti personali