# Perl/Istruzioni composte

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

### Composte

Per composte si intende quelle che chiamano almeno una o più funzioni/Minime. Normalmente è la quasi totalità del codice scritto. Infatti come le frasi possono essere composte da più frasi, così una istruzione può essere il risultato di una composizione di chiamate a funzione o parole semplici. Dato che il lettore al momento conosce solo le variabili e la funzione print, l'esempio riportato NON è un esempio di "buon" codice, ma aiuta a capire.
che produce:
Entriamo nel dettaglio:
La prima riga è una istruzione Minima ed assegna a $a il valore "testo di prova".
Dalla seconda riga alla decima riga è una istruzione composta:
c'è una "prima" funzione print alla quale gli si chiede di scrivere "risultato della prima print:" seguito da "qualcosa fra parentesi" seguito da " fine prima print\n".
Alla terza alla nona riga il "qualcosa fra parentesi" è di nuovo una print alla quale gli si chiede di scrivere una stringa che è il risultato ottenuto dalla funzione join.Alla join si chiede di "giuntare" con spazi le 5 stringhe contenenti "inizio seconda print" '$a' "=" "$a" "fine seconda print\n".
Come per l'algebra , prima di poter procedere occorre "agire" sulle parentesi più interne così il Perl risolve PRIMA le "funzioni" più interne e poi quelle più esterne.
Ecco perché viene mostrata prima le scritte della seconda e poi le scritte della prima.
Succede così anche in meccanica : per poter montare un pezzo che ha a sua volta un pezzo interno, occorre montare prima l'oggetto interno e racchiuderlo in quello esterno. Si può pensare anche alla "matriosca".
Nel nostro caso dato che la funzione scrive a video, prima viene scritta la più interna e poi la più esterna.

### Uso di || , && , And e Or

Si è visto che fra scalari è possibile usare i booleani and e or nelle varie forme : numeriche e logiche. Tuttavia è possibile usarli anche sulle istruzioni , e servono a creare una successione di istruzioni ma condizionate dall'esito delle istruzioni precedenti. Vediamone le caratteristiche:
Il Perl esegue l'istruzione 1 quindi se questa da un esito "falso" viene eseguita la istruzione 2 . Se l'istruzione 1 risulta invece "vera" l'istruzione 2 non verrà eseguita.
Il Perl esegue l'istruzione 1 quindi se questa da un esito "falso" NON viene eseguita la istruzione 2 . Se l'istruzione risulta invece "vera" l'istruzione 2 verrà eseguita.
È possibile concatenare più istruzioni tuttavia è sempre meglio mantenere il codice il più comprensibile possibile.
La differenza fra || e or oppure fra && e and è la precedenza nell'eseguire le operazioni : || e && hanno precedenza maggiore rispetto a or e and quindi necessitano l'utilizzo di parentesi per "delimitare" il campo di utilizzo:
Vediamo l'esempio che segue anticipando che la funzione unlink cancella dei file.Quindi si vuole che si cancellino i file indicati e che se questa non riesce si esegua una funzione gripe e poi si vada oltre (next LINE):