Differenze tra le versioni di "Perl/Istruzioni"

3 774 byte aggiunti ,  13 anni fa
'''NOTA''':la differenza fra un blocco e la definizione di un hash è evidente:l'hash deve avere un $,un"nome" ed una chiave fra {}, mentre il blocco non ha $,non ha nome e al suo interno sono presenti istruzioni.
 
=== Etichette ===
Le etichette individuano una istruzione o un blocco.
Le etichette da sole non servono molto, ma con dei costrutti particolari come goto , redo , next , last è possibile sfruttare meglio le loro potenzialità:
 
<ETICHETTA>:<istruzione>
 
<ETICHETTA>:{
... istruzioni ...
}
per esempio è possibile:
 
ETICHETTA_UNO: print "etichetta uno\n";
 
ETICHETTA_DUE:
{
print "etichetta due\n";
}
 
my $b = 15;
ETICHETTA_TRE : while ( $b < 20 )
{
print " etichetta tre ($b)\n";
$b++;
}
In questo modo un blocco o una istruzione "assume" un nome.Questo non è da confondere con il nome di una funzione.
 
==== Goto (da non usare) ====
Come dice il manuale del Perl l'uso del goto non è per nulla consigliato ed è limitato.Il suo uso "mal accettato" è quello di indicare una ETICHETTA.In questo modo il programma "torna" o "va" al punto indicato.Dato che questa istruzione si "sconsiglia" non verrà descritto oltre.
 
=== Istruzioni particolari su BLOCCO o ETICHETTA ===
Come anticipato precedentamente 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.
 
==== Last ====
Questa istruzione consente di terminare "prematuramente" un blocco o una etichetta.
 
last ; # usato un blocco
last <ETICHETTA>; # indica su quale etichetta
 
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; }
}
 
==== 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
 
 
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)
 
==== Next ====
Questa istruzione consente di "saltare" all'elemento successivo.
 
next ; # usato un blocco
next <ETICHETTA>; # indica su quale etichetta
 
 
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)
 
===DECISIONALI===
195

contributi