Cicli e iterazioni
Vediamo adesso qualche esempio delle tradizionali strutture iterative della programmazione strutturata. Tutti gli esempi riportati in questa pagina dovrebbero produrre un output come questo
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 -
Notiamo inoltre che gli esempi sotto riportati ottengono questo risultato usando l'operatore ++
, che
verrà discusso nelle prossime lezioni. Per chi non conoscesse l'operatore ++
è sufficiente sapere
che la sintassi $a = $a + 1
è del tutto equivalente alla scrittura $a++
.
Vediamo adesso qualche esempio.
Esempio di ciclo while standard
my $n = 0 ; print "\nWhile (1): " ; while ( $n++ < 10 ) { print "$n - " ; }
Esempio di ciclo until (ciclo while
con condizione negativa)
$n = 0 ; print "\nUntil (1): " ; until ( $n++ > 9 ) { print "$n - " ; }
Esempio di cicli while
e until
per una singola istruzione (vedi lezione precedente)
$n = 0 ; print "\nWhile (2): " ; print "$n - " while ( $n++ < 10 ) ; $n = 0 ; print "\nUntil (2): " ; print "$n - " until ( $n++ > 9 ) ;
Anche il ciclo for permette diverse sintassi. A rigore in Perl si dovrebbe parlare dell'istruzione
foreach, ma siccome la keyword for
è un sinonimo di foreach
possiamo usarle entrambe senza
alcuna differenza. Iniziamo col vedere la sintassi tradizionale (uguale a quella C, Java, PHP ecc.).
print "\nFor (1): " ; for ($n = 1 ; $n < 11 ; $n++) { print "$n - " ; }
questa è invece la sintassi corrispondente all'utilizzo canonico dell'istruzione foreach
print "\nFor (2): " ; my @array = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) ; for (@array) { print "$_ - " ; }
dove notiamo, ancora una volta, l'utilizzo della variabile $_
come parametro di default per la funzione print
. Essa contiene infatti il valore corrente dell'array (quello attualmente selezionato dall'istruzione for
).
Ovviamente anche per il ciclo for
abbiamo una sintassi adeguata all'esecuzione di una singola istruzione
print "\nFor (3): " ; print "$_ - " for 1..10 ;
Concludiamo vedendo un esempio di gestione di una struttura hash mediante un ciclo for
my %romans = ( 10, "X", 100, "C", 1000, "M" ) ; print "\nFor (4): " ; for my $key (keys %romans) { print "$key => $romans{$key} " ; } print "\n" ;
in questo caso avremo un output diverso da quello degli esempi precedenti, per l'esattezza
For (4): 1000 => M 10 => X 100 => C