Perl/Istruzioni composte
Composte
[modifica | modifica sorgente]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 | modifica sorgente]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);