|
Prima di dire qualunque cosa osserviamo
subito che il Perl non è pensato assolutamente per lo
sviluppo di applicativi complessi, ma di script, ovvero piccoli
programmi che svolgono attività di routine e che non
necessitano di essere progettati, strutturati o resi necessariamente
eleganti. Il Perl va oltre la shell, ma non pretende di diventare un
linguaggio per la programmazione di ampi programmi.
Lo scopo del Perl è quello di
fare le cose nella maniera più semplice possibile, senza
troppa cura per dettagli come dichiarazioni o leggibilità. Se
qualcuno pensa che il C ha una sintassi sintetica, noterà che
il Perl per quanto riguarda sinteticità è ancora
peggio. Naturalmente la sinteticità va a detrimento della
chiarezza e leggibilità, cosa in cui il Perl non eccelle
(anche si qualcuno può avere parere contrario). Il Perl è,
radicalmente, un linguaggio per script, piccoli programmi di utilità
che vanno fatti nella maniera più rapida possibile. Se
desiderate un linguaggio che serva a fare cose più complicate,
per quanto sia ovviamente possibile farlo in Perl, è meglio
considerare opzioni come Java o C++. Il che si sposa bene con la
filosofia di Unix e che dovrebbe essere generale nell'informatica: lo
strumento giusto al posto giusto. Purtroppo in informatica lo
strumento giusto viene talvolta usato al posto sbagliato e si
pretende che un cacciavite faccia anche da forbice. Questo vale
anche per il Perl: ripeto, non è adatto per programmi
grandi: in questi casi la sinteticità dopo un po' diventa una
palla al piede. Il Perl serve per ampliare la programmazione di shell
in modo da renderla più efficiente, portabile e omogenea. A
titolo di esempio vediamo come possiamo fare in Perl uno script
equivalente a quello visto prima:
open(DU, "du -S|");
while(<DU>) {
unshift @tmp, sprintf("%06d %s\n", split)
}
@tmp = sort { $a le $b } @tmp;
foreach(0..9) { print $tmp[$_]; }
Non entriamo nei dettagli perché sarebbe alquanto complesso
sviscerarli tutti. In linea di massima diciamo che questo script
esegue le stesse operazioni della pipeline di comandi di shell vista
prima, ma ha numerosi vantaggi. Innanzittutto vengono mandati in
esecuzione solo due programmi, il du e il Perl. Notiamo che
non abbiamo più la pipeline di processi perché gran
parte delle elaborazioni vengono fatte internamente dal Perl.
L'output del du in effetti viene incanalato dentro il Perl
usando una pipe, ma da quel momento in poi il Perl fa da solo:
infatti abbiamo la sort, la capacità di elaborare il testo
leggendo l'input riga per riga e interpetandola come record con i
campi separati da spazi (la split fa proprio questo). Un'altra
cosa da notare è che per ottimizzare siamo in grado di
mantenere in memoria, in una variabile array, l'input letto, dove la
shell ci costringerebbe a usare un file temporaneo. In sintesi il
Perl è la programmazione di shell trasformata in un linguaggio
alquanto coerente con le sue origini ma molto più potente ed
efficace.
Esaminiamo adesso le
differenze con gli altri linguaggi di scripting in ambiente Unix e
Linux. I principali concorrenti del Perl in ambiente Linux sono: Tcl,
Python, Scheme e PHP. Vediamoli uno per uno.
Il Tcl deriva dalla
programmazione di shell in maniera analoga al Perl. Il Perl però
rinuncia alla sintassi lineare tipica della shell per aderire ad una
sintassi simile a quella del C (anche se molto più
ridondante), e fornisce strutture dati evolute, come gli array e le
tabelle, mentre il Tcl mantiene l'approccio della shell, e utilizza
come suo unico tipo di dato la stringa. Il Tcl è meno
efficiente del Perl, ma ha una sintassi più semplice da
imparare. Un altro aspetto che differenzia Perl e Tcl in maniera
sostanziale è il fatto che quest'ultimo è concepito
principalmente per essere un linguaggio "embeddable",
ovvero possa essere incorporato in altri programmi (e infatti è
abbastanza usato per qusto scopo). Il Perl invece sta meglio da solo,
anche se tecnicamente è possibile usarlo come linguaggio di
estensione (in pratica è stato fatto raramente). Infine il
grande successo del Tcl è legato al Tk, il suo Toolkit,
strettamente legato al Tcl, che consente di scrivere con poche righe
di codice sofisticate interfacce utente. Molti programmi per Linux
sono scritte interamente in Tcl/Tk. Il Perl non fornisce di suo una
interfaccia grafica, anche se esistono numerose estensioni a questo
scopo (tra cui un port del Tk al Perl).
Il Perl e il Tcl
sono stati per anni i principali linguaggi di scripiting in ambiente
Unix, però recentemente si sono affacciati alla ribalta altri
concorrenti. Innanzitutto il Python, che è un
linguaggio molto elegante, che sembra riassumere per certi versi il
meglio del Perl e del Tcl. Innanzitutto la sintassi del Python è
molto chiara e leggibile, a differenza delle sintassi a volte
involuta e oscura del Perl. Poi il linguaggio è completamente
orientato agli oggetti, ed è dotato di una libreria ricca e in
continua evoluzione. Se da un lato il Python consente l'elaborazione
di testo in maniera molto potente come il Perl, il Python è
facile da incorporare in alri programmi, e infatti è
utilizzato in vari programmi come scripting language. Per quanto
riguarda le interfacce grafiche il Python è dotato di un
ottima collegamento al Tk del Tcl, e rivaleggia (anzi supera) il Tcl
per la realizzazione di GUI nella sua stessa area! Per esempio il
Glint, il sistema di configurazione della distribuzione Linux RedHat,
è realizzato in Python/Tk.
Il PHP è un linguaggio di
scripting per pagine Web. Notare che a differenza degli altri
linguaggi presentati in questo paragrafo, il PHP non può
essere utilizzato come linguaggio autonomo ma deve essere usato
incorporato nelle pagine Web. Sia Perl che PHP possono essere
utilizzati per creare pagine Web interattive, ma mentre nel primo
caso si tratta di uno degli usi possibili, nel secondo il Web è
l'unico uso del PHP. In un certo senso il PHP è una specie di
Perl light (più o meno come il JavaScript è un Java
light), adattato per l'uso in pagine Web. È molto più
facile da usare del Perl, e ne riprende molti aspetti sintattici ma
non è altrettanto potente. È adatto quando occorre fare
delle operazioni molto orientate alla pagina (per lo più
gestione di form o presentazione di risultati di query a database) ma
non può sostituire il Perl quando sono necessarie operazioni
complesse di elaborazione testi (per esempio motori di ricerca o
invio di messaggi di email personalizzati).
L'ultimo arrivato ma non per questo
meno temibile sembra essere lo Scheme. Come è noto, molti
programmi per Linux sono stati scritti dalla Free Software Foundation
di Richard Stallman, per lo GNU Project. La FSF ha eletto come suo
linguaggio standard lo Scheme, una specie di Lisp semplificato. Non
dimentichiamo che Emacs, il diffusissimo editor di testi in ambiente
Linux/Unix, è scritto in gran parte in Emacs Lisp , e la sua
sterminata potenza è dovuta al fatto che è espandibile
con estrema facilità aggiungendo nuovi script. La FSF intende
realizzare una suite di programmi di Office che abbiano la stessa
estensibilità di Emacs utilizzando un linguaggio molto simile
ad Emacs Lisp ma più standardizzato e più semplice,
ovvero lo Scheme. Per adesso, la FSF ha realizzato il Guile, una
implementazione di Scheme molto completa; il progetto GNOME,
sponsorizzato dalla FSF, ha adottato Guile come suo linguaggio di
estensione; il Gimp utilizza appunto Scheme (la versione SIOD per la
precisione) per la realizzazione degli script, e si vocifera che la
prossima versione di Emacs sostituirà ad Elisp appunto il
Guile.
|