Moduli e librerie

Uno dei principali vantaggi offerti da Perl consiste nella vasta disponibilità di moduli e librerie disponibili sul Web. Il punto di riferimento ufficiale è CPAN. Ogni volta che dobbiamo affrontare un problema (dalla connessione al database alla grafica 3D) possiamo provare a cercare su CPAN: in molti casi troveremo delle soluzioni già pronte e collaudate, che potremo sfruttare come punto di partenza del nostro lavoro.

L'installazione e configurazione dei moduli Perl esula dalle finalità di questo tutorial. In particolare la procedura di installazione dei moduli dipende fortemente dal sistema operativo e dalla versione di Perl. Le modalità di installazione di un nuovo modulo su Linux sono in generale molto diverse dalla procedura di installazione dello stesso modulo su Windows o MAC OS. Per questo motivo di seguito ci limiteremo a mostrare un esempio di utilizzo di un modulo, assumendo che esso sia già installato.

Se lavoriamo con ActivePerl su Windows la gestione dei moduli Perl può essere delegata al Perl Package Manager (in breve: ppm), un utility che viene installata assieme ad ActivePerl: ppm può essere lanciato sia dal menù Programmi sia a linea di comando, digitando ppm. L'aggiunta di nuovi moduli su ppm potrebbe risultare problematica: per questo motivo qui sotto usiamo come esempio un modulo che dovrebbe essere già disponibile con l'installazione di ActivePerl: si tratta dal modulo Text::CSV_XS, nato allo scopo di semplificare la gestione dei file CSV.

Per dettagli e informazioni sul modulo Text::CSV_XS rimandiamo come sempre a CPAN.

Per dichiarare l'intenzione di usare un modulo scriviamo use seguito dal nome del modulo. Siccome in questo caso vogliamo usare il modulo Text::CSV_XS scriviamo:

# Dichiarazione del modulo Text::CSV_XS 
use Text::CSV_XS ;

per utilizzare il modulo dobbiamo necessariamente leggere la documentazione, allo scopo di identificare le API (Application Programming Interface) che ci interessano e le modalità di utilizzo. Ad esempio, nel caso del modulo Text::CSV_XS, la documentazione ci dice che dobbiamo creare un oggetto tramite l'istruzione

my $csvObject = Text::CSV_XS->new() ;

dove il nome (o meglio l'identificatore) dell'oggetto, in questo caso csvObject, è del tutto arbitrario. Possiamo scegliere il nome che più ci piace, a patto di rimanere coerenti con la nostra scelta. A questo punto siamo pronti ad invocare i metodi dell'oggetto, accedendo così alle funzioni esposte dal modulo. Vediamo un esempio concreto, supponendo di leggere dal file system un file CSV di nome prova.csv, contenente le seguenti righe:

Prima riga A
Seconda riga A, Seconda riga B
Terza riga A, Terza riga B, Terza riga C
Quarta riga A, Quarta riga B, Quarta riga C, Quarta riga D 
àèìòù

un esempio di codice che legge il file CSV sfruttando il modulo Text::CSV_XS potrebbe essere

# Apertura del file: vedi lezione 10
my $file = "prova.csv" ;
open(my $data, '<', $file) or die "File non trovato: $file\n" ;

# Lettura del contenuto CSV
my $n = 0 ;
while (my $row = <$data>) {
    chomp $row ;
    if ($csvObject->parse($row)) {
		$n++ ;
        my @columns = $csvObject->fields() ;
        print "$n -> @columns (array di ".@columns." elementi)\n" ;
    } else {
        warn "Errore nella riga: $row\n" ;
    }
} # End of while

tutte le chiamate al modulo Text::CSV_XS sono riconoscibili dall'invocazione di un metodo sull'oggetto $csvObject, come ad esempio $csvObject->fields(), che invoca il metodo (o funzione) fields() del modulo. Questo modo di lavorare dovrebbe risultare familiare a chi conosce il paradigma OOP (Object Oriented Programming): se non conosciamo la programmazione ad oggetti possiamo pensare all'oggetto $csvObject come una specie di "driver" che consente l'accesso alle "funzioni" della libreria.

Eseguendo lo script qui sopra otteniamo

1 -> Prima riga A (array di 1 elementi)
2 -> Seconda riga A  Seconda riga B (array di 2 elementi)
3 -> Terza riga A  Terza riga B  Terza riga C (array di 3 elementi)
4 -> Quarta riga A  Quarta riga B  Quarta riga C  Quarta riga D  (array di 4 elementi)
Errore nella riga: àèìòù

Alcune note:

  • Il codice qui sopra introduce la funzione chomp, utilizzata per rimuovere il carattere di fine linea. Per i dettagli rimandiamo alla documentazione on line.
  • Anche l'istruzione warn potrebbe risultare "nuova": si tratta semplicemente di un'alternativa più raffinata del solito print, come spiegato qui.
  • L'ultima riga del file contiene appositamente dei caratteri "sporchi", che dovrebbero servire ad emulare un errore gestito proprio tramite l'istruzione warn.
  • Lo script usato per leggere il file CSV è piuttosto inutile, dato che si limita a stampare su schermo il contenuto del file: l'abbiamo usato solo per mostrare un esempio di utilizzo del modulo. Nelle applicazioni reali le colonne lette dal file CSV potrebbero essere usate per elaborazioni più complesse.

Conclusioni

Con questa lezione concludiamo la nostra introduzione a Perl. Come promesso all'inizio del corso ci siamo limitati a spiegare la sintassi e le principali keyword del linguaggio, senza scendere troppo nei dettagli. Per lavorare con Perl in modo professionale dobbiamo obbligatoriamente approfondire la conoscenza dello strumento. Se vogliamo capire meglio il paradigma OOP nell'ambito Perl possiamo iniziare a leggere qui oppure qui.

Per ulteriori informazioni sulle modalità di installazione possiamo consultare questa guida. Per informazioni sui moduli disponibili possiamo leggere qui, mentre per i moduli già installati con Perl possiamo guardare qui.

Ovviamente, per ogni evenienza possiamo sempre provare a ricorrere all'elenco delle FAQ.

Buon Perl a tutti!

Download

Qui sotto è possibile scaricare tutti i sorgenti utilizzati durante il tutorial

Tutorial 1.0.1
Tutorial 1.0




Home Pagina 15 di 15