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


Home Pagina 7 di 15