Corso di Perl

Strutture di controllo: for e foreach, $_

 

Il ciclo for

Introduciamo adesso il ciclo per eccellenza, cioè il ciclo for. In realtà non è che ci sia poi tantissimo da dire, anzi... per chi programma già in C non c’è proprio niente di nuovo: il ciclo for del Perl è identico a quello del C. Per i non iniziati, ecco come funziona:

for ( $i=1 ; $i <= 10 ; $i = $i +1)
      {
      print “$i \n”;
      }


La parola chiave for è seguita da una serie di 3 espressioni racchiuse in una parentesi, separate da punti e virgola. La prima espressione viene eseguita solo una volta, quando viene incontrata l’espressione for. Quindi inizia il ciclo.
All’inizio di ogni ciclo, viene valutata la seconda espressione: se questa è vera, il blocco di istruzioni viene eseguito, e poi viene eseguita la terza espressione. E si ricomincia, valutando la seconda espressione.
Se ad un certo punto la seconda espressione non è più vera, il ciclo termina.

Quindi, il nostro ciclo di esempio produrrà questa serie di operazioni:

- assegna 1 a $i
- $i è minore o uguale a 10? Sì, perciò esegui il blocco
- scrive $i (1) sullo schermo
- incrementa $i di 1 (adesso $i contiene 2)
- $i è minore o uguale a 10? Sì, perciò ripeti il blocco
- scrive $i (2) sullo schermo
- incrementa $i di 1 (adesso $i contiene 3)
- $i è minore o uguale a 10? Sì, perciò ripeti il blocco
- scrive $i (3) sullo schermo
.......
- incrementa $i di 1 (adesso $i contiene 11)
- $i è minore o uguale a 10? No, esci dal ciclo

Perciò vediamo come il nostro ciclo for di esempio scrive sullo schermo i numeri da 1 a 10, e poi esce.

E’ in pratica uguale al seguente ciclo while:

$i=1;
while ($i<=10)
      {
      print “$i \n”;
      $i = $i+1;
      }


Non c’è differenza tra i due cicli, potete scegliere quello che preferite. L’esempio di ciclo for che abbiamo visto è uno dei più classici: una variabile contatore che viene incrementata fino ad un certo limite. Niente però vieta di scrivere cose completamente diverse nelle tre espressioni. Ci sono programmatori che riescono a condensare nelle tre espressioni anche tutto il resto del blocco, cosa che in informatica si avvicina molto alla perversione...
In Perl, il ciclo for non è molto usato. Più che altro è presente per gli ex-programmatori C, che in questo modo possono scrivere velocemente i loro script senza dover imparare altre cose. C’è invece un ciclo diverso, specifico del Perl e più potente:

Il ciclo foreach

In realtà, nel Perl le parole chiave for e foreach sono sinonimi, e potete usare quella che volete. Nella pratica, è meglio usare for per i cicli che ho illustrato nel paragrafo precedente, per similarità con gli altri linguaggi, e foreach  per il modo particolare in cui il Perl esegue questo ciclo:

foreach $var (@list)
      {
      blocco;
      }


Nel ciclo foreach, il blocco interno di istruzioni viene eseguito una volta per ogni elemento dell’array @list, che deve essere messo tra parentesi. Ad ogni iterazione, la variabile $var prende il valore di quel particolare elemento.

Ad esempio:

foreach $i (1..10)
      {
      print “$i \n”;
      }


Questo ciclo foreach fa la stessa identica cosa del ciclo for di esempio di prima: scrive sullo schermo i numeri da 1 a 10. Infatti tra parentesi costruiamo un array al volo, grazie all’operatore range “..”(che abbiamo illustrato nella lezione 7). I valori di questo array vengono messi nella variabile $i uno alla volta, e ogni volta viene eseguito il blocco di istruzioni interno.

La variabile che “tiene il conto” è opzionale. Se non è specificata, il valore viene assegnato alla variabile “$_” (dollaro + sottolineato). Questa variabile nel Perl è speciale, nel senso che dovunque venga omesso l’argomento di una funzione, viene usata $_. Cioè:

foreach (1..10)
      {    
      print;
      }


fa la stessa cosa di prima (a parte i ritorni a capo, che ci interessano non poco!). Infatti, così come foreach si aspettava una variabile e non c’è niente (e perciò viene usata $_), anche print si aspetta perlomeno una variabile da stampare, e visto che non diciamo nulla prende di nuovo $_.
In futuro sfrutteremo molto spesso questa proprietà di $_, per adesso tenetela a mente.

Nella prossima lezione vedremo come applicare foreach al nostro programma delle altezze.

 

Torna all'indice Generale del corso di Corso di Perl di Software Planet