Perl/Istruzioni particolari su blocchi o etichette
< Perl
(Reindirizzamento da Linguaggio Perl/Le istruzioni/Istruzioni particolari su BLOCCO o ETICHETTA)
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
modificaQuesta 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
modificaQuesta 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
modificaQuesta 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)