Corso di Perl

Lavorare con i files: Open

 

Ok, come da tempo promesso iniziamo adesso un nuovo capitolo del nostro corso di Perl. Se siete dei programmatori, sapete già che la lettura/scrittura di files è essenziale per qualunque programma. Se non lo siete, fidatevi di me :-)
Tutti i linguaggi hanno qualche istruzione dedicata ai files. In genere sono poche e complicate. Per il Perl, il caro Larry Wall ci ha dato dentro, e in una singola istruzione ha raccolto un numero di funzioni più alto di quello che riesco a contare... ma vediamo un esempio basilare:

open ( TEMP, "pippo");
$testo = <TEMP>;
close (TEMP);

Ad occhio e croce, tralasciando i dettagli, dovreste essere in grado di indovinare cosa sta succedendo: la prima riga apre un file chiamato “pippo”, riferendosi ad esso con il nome “TEMP”. Questo file viene letto in qualche modo, con il risultato che va nella variabile $testo. Infine, il file viene chiuso.

La sequenza delle operazioni è sempre questa, l’unica cosa che varia è il numero di letture e/o scritture che vengono eseguite nel mezzo.

L’istruzione open

Open (che in italiano si traduce con “aprire”) serve appunto ad aprire un file. Il significato di “aprire”, in informatica, è di rendere disponibile al programma una risorsa. Una parola più adatta sarebbe “accedere”, ma non la usa nessuno (in genere i programmatori non sono puristi della lingua...)
Una volta aperto un file, possiamo fare principalmente due cose: leggere il suo contenuto, e scriverci un nuovo contenuto. Alla fine, il file deve essere chiuso.
In genere, un file è aperto in sola lettura oppure in sola scrittura, cioè per una sola delle operazioni alla volta. E’ possibile aprirlo per entrambe, ma per adesso non facciamo il passo più lungo della gamba.

La sintassi per aprire un file in lettura è:

open ( FILEHANDLE, “<nomefile”);

“nomefile” è il nome del file che vogliamo aprire, e FILEHANDLE è un nome fittizio, generalmente scritto a caratteri tutti maiuscoli. Potete vederlo come una variabile speciale, che contiene un riferimento al file. A parte open, le istruzioni che lavorano coi files si limitano ad usare filehandles.

Notate il carattere “<” davanti al nome del file. Piuttosto che un “minore”, va visto come una freccia che punta dal nome del file verso il nostro programma. E’ la direzione in cui le informazioni viaggiano, e adesso indica che il file viene letto. Per aprire un file in scrittura, occorre rovesciare la freccia:

open ( FILEHANDLE, ">nomefile");

Attenzione a fare prove a caso: se aprite in questo modo un file che esiste già, il suo contenuto viene cancellato! Quindi andateci piano :-)

La freccia è in effetti opzionale, e infatti nel nostro primo esempio non l’avevamo scritta: in sua assenza, il Perl assume che il file venga aperto in lettura:

open ( FILEHANDLE, "nomefile");

è come aver scritto “<nomefile”. In questo modo, tra l’altro, non si rischiano danni se si dimentica la freccia per sbaglio!
Per rendere più chiara l'istruzione, si possono aggiungere spazi in cima e in fondo al nome del file a volontà:

open ( FILEHANDLE, "<  nomefile ");

E inoltre, essendo il nome del file una stringa come le altre, si possono interpolare variabili come al solito:

open ( FILEHANDLE, "< $nome");
open ( FILEHANDLE, ">${num}pippo${num2}" . $a . $b . " ab$c");
open ( FILEHANDLE, $pippo);

L’ultimo esempio, mancando di frecce, apre in lettura il file il cui nome è contenuto nella variabile $pippo. Si può anche pensare di scrivere questo:

$pippo = ">pippo";
open ( FILEHANDLE, $pippo);

che apre il file “pippo” in scrittura, perché il primo carattere della stringa è “>”. Questo codice è sintatticamente corretto, ma da evitare. Ci sono troppe possibilità di fare sbagli, perché ad un'occhiata veloce sembra che quell’open stia aprendo un file in lettura, non in scrittura!

Bene, adesso abbiamo un paio di nozioni su come aprire un file. Nella prossima lezione vedremo come leggerlo o scriverlo, e poi continueremo con qualche altro esempio dell'istruzione open, che ha ancora molto da mostrarci.

 

Torna all'indice Generale del corso di Corso di Perl di Software Planet