|
Un'avvertenza: innanzitutto il Perl non è un linguaggio semplice:
nonostante tutto il complesso sia abbastanza logico e ordinato, è
anche ricco di sottigliezze e particolarità (in gergo, "magie"), che
ben sfruttate sono potenti strumenti, ma che risultano spesso
sorprendenti per il principiante.
Il perl fondamentalmente è un interprete. Uno script tuttavia prima
di essere eseguito viene letto per intero e viene verificata la
sintassi. Lo script viene eseguito dopo essere stato compilato in un
formato interno, ottimizzato per l'esecuzione. Questo ha lo svantaggio
di richiedere una pausa prima di cominciare l'esecuzione. Per la
verità questa pausa praticamente non si nota se non per script molto
lunghi, tuttavia il tempo perso all'avvio di uno script comporta una
esecuzione efficiente e rapida, quasi da compilatore. Sono in corso
progetti di byte compilazione per "compilare" gli script in un
lnguaggio intermedio (indipendente dalla piattaforma) e eliminare
questa pausa per programmi ormai testati e "rilasciati". Il fatto che
uno script sia comunque immediatamente eseguibile rende il perl un
meraviglioso strumento per quei programmini "usa e getta" che spesso
servono.
L'ultima versione del Perl è la 5.002. Comunque la versione 4.036 è
rimasta stabile per anni ed è molto usata, cosicchè in pratica è come
se fosse un altro dialetto corrente del Perl. La versione 5 mantiene
al 99% la compatibilità con la versione 4, ma non viceversa. Comunque
a scanso di guai non è infrequente avere tutte e due le versioni
installate. Spesso se non si usato le caratteristiche "avanzate" del
Perl 5 si sviluppa direttamente in Perl 4 (evitando naturalmente le
incompatibilità col Perl 5) per avere uno script portabile anche a
quelle installazioni dove l'amministratore è troppo pigro per
installare il Perl 5. In realtà il Perl si è abbastanza stabilizzato
con la versione 4. La versione 5 è un balzo in avanti per semplificare
lo sviluppo di programmi "grandi" e non solo brevi script. Infatti
molti programmi di una certa portata sono stati scritti in Perl: per
citarne un paio famosi, majordomo (gestore di liste di posta
elettronica) e mirror (programma per il mirroring di archivi ftp).
Il Perl 5 ha aggiunto al linguaggio strutture dati complesse,
modularità, programmazione object-oriented e alcune modifica per
consentire una eventuale compilazione. Tuttavia non è ancora stato
scritto un compilatore Perl: se state cercando un argomento per la
vostra tesi di dottorato... Comunque in questo articolo ci riferiremo
principalmente al Perl 5, anche se molte cose sono valide per il Perl
4.
La sintassi del Perl è simile a quella del C, ma non uguale. Per
esempio il seguente programma stampa tutti gli elementi dell'array a
(di indice inferiore a 100) che sono maggiori di zero, fermandosi al
primo elemento minore di zero. Probabilmente poteva essere scritto in
maniera più semplice ma così si illustrano alcune caratteristiche
della sintassi. Discuteremo delle variabili più avanti, in questo caso
$i è una variabile e $a[$i] sono gli elementi dell'array.
| $i=0; |
| LOOP: |
|
while($i<100) { |
|
last LOOP unless($a[$i]>=0); next if($a[$i]==0); print $a[$i]; |
| } continue { ++$i } |
Come si vede, rispetto al C, ci sono abbastanza differenze a cui
stare attenti. Gli elementi sintattici convenzionali ci sono tutti:
"if", "while", "for", ma anche "unless" (negazione di if), "until"
(negazione di while), "foreach" (cicla sugli elementi di un array),
anche se manca lo "switch". I comandi come "if" e "while" vogliono
sempre le parentesi graffe, anche se sono seguiti da un comando solo:
se si vogliono omettere le graffe, essi devono essere messi dopo il
comando (come si vede nell'esempio). Per uscire dai cicli si usa il
"last" e non il "break"; l'equivalente del "continue" è il "next"
mentre il "continue" in Perl ha un significato diverso: segue i
blocchi dei cicli e va premesso al blocco che deve comunque essere
eseguito dopo un "next". Le label servono per etichettare i cicli e
vengono utilizzate dai comandi "last" e "next" per uscire o continuare
più cicli nidificati.
Gli operatori del C ci sono quasi tutti, con la stessa precedenza, in
più ce ne sono degli altri: per esempio "." che effettua la
concatenazione di stringhe (non ci sono record, quindi "." non è
l'operatore di accesso a record), l'operatore "=~" di matching di
stringhe con espressioni regolari, l'operatore "x" che ripete una
stringa, gli operatori "eq", "ne" che confrontano stringhe (a
differenza di "==" e "!=" che tentano di interpretare i loro argomenti
come numeri), eccetera.
|