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.