ePrometeusCorsoLinuxLinux
testi articoli
Testi Articoli  Download
Home | Introduzione | Panoramica | Form | Analisi Log | 
CorsoJava è ora Video! Free for all!
Clicca Qui!
Tutorial Perl
Il coltello svizzero di Linux: il Perl
Una questione di feeling
La shell di Unix
Dalla shell al Perl
A cosa serve il Perl
Conclusioni


<<< A cosa serve il Perl >>>

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.


ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com