Costrutti condizionali

Perl supporta tutte le comuni strutture condizionali della programmazione strutturata. Date le finalità di questo corso introduttivo non perderemo tempo illustrando le differenze teoriche tra i diversi tipi di strutture condizionali, ma andremo subito al sodo mostrando qualche esempio pratico. In particolare, poiché Perl incoraggia ciascun programmatore a trovare il proprio "stile" personale, vedremo come sia possibile ottenere gli stessi risultati usando sintassi molto diverse.

my @array = ("a", "b", "c") ;
if (@array < 0) {
	print "Array nullo\n" ;
} elsif (@array < 10) {
	print "Array corto\n" ;
} else {
	print "Array lungo\n" ;
}

Notiamo la condizione @array < 0, che confronta la lunghezza dell'array con lo scalare 0. Questa è infatti una caratteristica del Perl: tutte le volte che la finalità del codice è "ovvia" l'interprete non richiede istruzioni specifiche. Per questo motivo in Perl non è necessario usare funzioni come count() (PHP), size() (Java) o length (JavaScript): l'interprete dello script "da per scontato" che il confronto riguardi la lunghezza dell'array.

Oltre al normale operatore not (il simbolo !) Perl offre un altro modo di negare un test condizionale. Invece di scrivere if (!condizione) possiamo usare il costrutto unless

unless (@array < 0) {
	print "Array non nullo\n" ;
}

C'è però un aspetto del Perl che va in controtendenza rispetto alla filosofia del linguaggio: l'uso delle parentesi graffe per delimitare un code-block condizionale. A differenza di molti linguaggi in Perl non è permesso omettere le parentesi graffe quando un blocco condizionale consta di una sola istruzione. In altri termini il codice qui sotto è sbagliato

if (@array > 0) print  "ERRORE: servono le parentesi!\n" ;

Si potrebbe giustamente obiettare che è troppo scomodo dover specificare le parentesi graffe ogni volta che una condizione if è seguita da un'unica istruzione. In realtà ciò non è necessario, perché Perl suggerisce di gestire situazioni simili usando una notazione "inversa", ovvero

print "if (senza parentesi)\n" 		if 1 ;
print "unless (senza parentesi)\n" 	unless 0 ;

Dove abbiamo usato i simboli 1 e 0 per denotare le condizioni true e false.

Questo esempio mostra ancora una volta che una delle principali caratteristiche di Perl è quella di preferire l'originalità e la flessibilità rispetto a molti standard di programmazione. In Perl possiamo fare tutto ciò che è permesso dagli altri linguaggi, ma spesso il modo di farlo è diverso dagli standard tradizionali. Inoltre esistono sempre modi diversi (dal punto di vista sintattico) di ottenere lo stesso risultato.



Home Pagina 6 di 15