# Perl/Cicli

Perl
Copertina Bibliografia Tutti i moduli · Sviluppo
    CopertinaPerl/Copertina
* IntroduzionePerl/Introduzione
* C'è Perl?Perl/C'è Perl?
* Primo programma: Ciao Mondo!Perl/Primo programma: Ciao Mondo!
** Primo programma in un filePerl/Primo programma in un file
* VariabiliPerl/Variabili
** Variabili scalariPerl/Variabili scalari
** Variabili vettoriPerl/Variabili vettori
** Variabili hashPerl/Variabili hash
* IstruzioniPerl/Istruzioni
** Istruzioni minimePerl/Istruzioni minime
** Istruzioni compostePerl/Istruzioni composte
** Istruzioni racchiuse o bloccoPerl/Istruzioni racchiuse o blocco
** Istruzioni etichettaPerl/Istruzioni etichetta
** Istruzioni particolari su blocchi o etichettePerl/Istruzioni particolari su blocchi o etichette
** Istruzioni decisionaliPerl/Istruzioni decisionali
** CicliPerl/Cicli
* Applicare la teoriaPerl/Applicare la teoria
* FunzioniPerl/Funzioni
* Funzioni Native sulle variabiliPerl/Funzioni Native sulle variabili
** Funzioni Native su scalariPerl/Funzioni Native su scalari
** Funzioni Native su vettoriPerl/Funzioni Native su vettori
** Funzioni Native su hashPerl/Funzioni Native su hash
* FilePerl/File
* Espressioni regolariPerl/Espressioni regolari
** Espressioni regolari (oltre)Perl/Espressioni regolari (oltre)
** Espressioni regolari (contesto)Perl/Espressioni regolari (contesto)
Modifica il sommario

### I cicli

I cicli sono una serie di "azioni" ripetute "fino a" o "un certo numero di volte". Le azioni sono contenute in un blocco.Ogni volta che si esegue un blocco viene detto "iterazione". Ognuno di questi costrutti ha un elemento decisionale che serve a determinare la fine del ciclo.
NOTA: non è obbligatorio che in ciclo finisca.

#### For

Il ciclo for è quello più comune a molti linguaggi. Da questo è possibile ottenere delle altre tipologie ma nell'uso generale si preferisce utilizzarlo quando il numero di iterazioni è noto. La sua sintassi è la seguente:
vediamo un esempio [ciclo finito]:
che produrrà :
vediamo ora che cosa succede se togliamo la condizione (CTRL+C per fermare) [ciclo infinito1 no condizione]:
Sorpresi? se non c'è una condizione che ferma il ciclo (o se questa non si verifica mai!) il ciclo continua indefinitamente!
Vediamo ora che cosa succede se togliamo l'incremento (CTRL+C per fermare) [ciclo infinito2 no incremento]:
Sorpresi? se non c'è un incremento, la condizione che ferma il ciclo sarà sempre vera; quindi, il ciclo continua indefinitamente!
NOTA: Continua indefinitamente perché, nel blocco, $b non viene alterata e quindi il suo valore rimane costante. Pertanto la condizione
è sempre vera.
vediamo ora che cosa succede se togliamo l'inizio [ciclo finito senza inizio]:
che produrrà:
Come si vede, mancando un valore iniziale a $b è stato messo il valore undef che nel caso della condizione viene posto a uguale al valore 0 mentre nel caso della stringa viene posto uguale al valore "". Dopo la prima iterazione dal valore undef diventa 1 per effetto della chiamata $b++ e poi si incrementa.

#### While e Until

Il ciclo while è come il ciclo for con la sola condizione. Le istruzioni nel blocco vengono eseguite fino a quando la condizione è vera. Il ciclo until è come il ciclo while ma vengono eseguite le istruzioni se la condizione NON è verificata.
Vediamo come ottenere i cicli precedenti con while e until: [ciclo finito]
[ciclo infinito1 no condizione]: la condizione è necessaria quindi questo caso non è possibile.
[ciclo infinito2 no incremento] (CTRL + C per terminare):
[ciclo finito senza inizio ] :

#### Do ... While e Do ... Until

Questo costrutto è nella realtà una chiamata a funzione. Apparentemente assomiglia al costrutto sintattico di altri linguaggi ma perde (come ogni chiamata a funzione) la possibilità di usare i modificatori di ciclo. È un costrutto usato se occorre fare almeno una iterazione e poi un controllo. Si basa sul principio di while e until con l'unica differenza che la condizione viene verificata alla fine del blocco di istruzioni , pertanto almeno una volta le istruzioni vengono eseguite.
NOTA:avete notato il ; alla fine ?
Riportiamo gli esempi con questo costrutto: [ciclo finito]
[ciclo infinito1 no condizione]: la condizione è necessaria quindi questo caso non è possibile.
[ciclo infinito2 no incremento] (CTRL + C per terminare):
[ciclo finito senza inizio ] :
È opportuno precisare che modificando opportunamente i valori iniziali , è possibile ottenere che venga eseguito almeno una volta il ciclo utilizzando while o until Vediamo questo esempio: [do ... while ]
che produce :
NOTA:se $anni = 0 viene almeno scritta una riga : "hai avuto anche 0" [do ... until ]

#### Foreach

Questa istruzione consente di "scandire" una lista (array).
Vediamo ora come è possibile creare il [ciclo finito]:
che produrrà :
NOTA: $b non è stato incrementato ma assume il valore di volta in volta contenuto in lista.Infatti non ha valore 10 ma 9 !

#### While , Until , Foreach e Continue

Questo costrutto è utile quando "al termine di ogni iterazione" occorre compiere una serie di incrementi oppure quando si vuole "evidenziare" l'incremento:
È un modo per riproporre lo spazio per l'incremento del ciclo for.
Esempio:
che produce :
Esempio:
che produce: