Perl/Istruzioni composte

Indice del libro


Composte

modifica

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.

 $a = "testo di prova";                                                          
 print "risultato della prima print:".
       (print join( " " , "inizio seconda print"
                        ,'$a'
                        ,"="
                        ,"$a"
                        ,"fine seconda print\n"
                   )
       ).
       " fine prima print\n";

che produce:

inizio seconda print $a = testo di prova fine seconda print                           
risultato della prima print:1 fine prima print 

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

modifica

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:

 <istruzione1> or <istruzione2>

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.


 <istruzione1> and <istruzione2>

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):

 unlink "alpha", "beta", "gamma"
           or gripe(), next LINE;

 unlink("alpha", "beta", "gamma")
           || (gripe(), next LINE);