# Perl/Istruzioni decisionali

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
chiudi indice

### Istruzioni Decisionali

Per decisionali si intende quelle istruzioni che a seguito di una condizione consentono di far fare o meno una parte di istruzioni. Facciamo un esempio: un uomo nasce, cresce e muore. Durante la crescita passa da bambino, ragazzo, giovane, adulto, vecchio, anziano. Per puro esempio stabiliamo che l'età sia l'unico parametro che faccia passare da una definizione all'altra. Pertanto si potrebbero definire queste soglie: bambino fino a 14, ragazzo da 14 a 17, giovane da 17 a 23, adulto da 23 a 60, vecchio da 60 a 75, anziano oltre 75

### if, elsif, else

l'istruzione if è una decisionale "spartiacque" cioè divide l'esecuzione del programma in "quella parte che verifica la condizione" e "quella parte che non la verifica". Nel mezzo delle parentesi ( e ) va posta la condizione:
L'istruzione di print verrà eseguita SOLO se $eta_ora sarà minore di 14 . NOTA: il punto e virgola a indicare la fine dell'istruzione.Inoltre all'if (se usato in fondo) si può associare SOLO una istruzione.
È possibile associare un blocco all'istruzione di if:
NOTA: Ora il punto e virgola non c'è perché le istruzioni sono dentro ad un blocco. Occorre poter distinguere una istruzione (anche se condizionale) ed un blocco associato ad una condizione. È possibile inoltre associare più verifiche utilizzando il costrutto elsif:
Esiste anche un'altra forma più elegante :
Il caso else viene eseguito, se tutte le condizioni precedenti NON sono state verificate. Il caso else DEVE essere l'ultimo. NOTA: È possibile includere il caso else senza alcuna clausola elsif.Per esempio si sarebbe potuto scrivere:

### unless , else

Unless è un if al "contrario" cioè se NON si verifica la condizione allora viene eseguito. Vediamo gli esempi precedenti con unless (dove è possibile applicarli).
NOTA: il punto e virgola a indicare la fine dell'istruzione.Inoltre all'unless (se usato in fondo) si può associare SOLO una istruzione.
NOTA: a differenza di if , unless non ha un "elsunless" ne tantomeno "elsif"
NOTA:unless è utile per le funzioni es:

### Ma il comodo Switch ?

Purtroppo in modo "nativo" non esiste un costrutto switch ma l'autore del linguaggio propone questa soluzione utilizzando le etichette ed i blocchi :
E quindi : si definisce un blocco con l'etichetta SWITCH se viene soddisfatta la condizione "aaa" o "AAA" allora viene impostata $trovata a 1 e quindi si esce con l'istruzione last SWITCH.
Se non viene trovata , la variabile $trovata viene messa a 0 (lo era già ma meglio indicarlo in modo esplicito). Si sarebbe potuto scrivere:
Tuttavia è sicuramente più immediata la prima forma.
Anche in questo caso è emerso che in Perl è possibile scrivere in più forme una istruzione ...