Input/Output su file

Guida a Perl
di M. Liverani

I canali standard di comunicazione di ogni programma sono tre e ad ognuno di questi è associato un handler:

<STDIN> standard input
<STDOUT> standard output
<STDERR> standard error
Tab. 1: I file handler standard

Così come ogni input avviene di default attraverso <STDIN>, così anche l'output viene emesso attraverso <STDOUT>; in alcuni casi è opportuno dichiarare esplicitamente il canale di output:

print STDOUT "Buongiorno $nome\n";

Il canale <STDERR> è simile a <STDIN>, ma viene solitamente utilizzato per visualizzare i messaggi di errore in modo tale che, se anche lo standard output è rediretto attraverso un file, il messaggio di errore viene visualizzato ugualmente sul terminale dell'utente o sulla console del sistema.

Oltre a questi file handler standard che non è necessario aprire o chiudere esplicitamente, è possibile aprire anche un canale di comunicazione verso un normale file di testo sull'unità di memoria di massa.

Prima di poterlo utilizzare, un file deve essere aperto dichiarandone anche l'uso che se ne intende fare; il file infatti può essere aperto in modalità differenti:

read: open(handle, "<nome") si possono effettuare solo operazioni di lettura dal file specificato;
write: open(handle, ">nome") si possono effettuare soltanto operazioni di scrittura sul file; se il file già esiste verrà cancellato e ne verrà creato uno nuovo;
append: open(handle, ">>nome") si possono effettuare solo operazioni di scrittura aggiungendo dati in coda al file; se il file già esiste in questo caso non verrà cancellato, se non esiste verrà creato.
Tab. 2: Modalità di apertura di un file

Il seguente script legge tutte le linee di un file di testo e le visualizza sullo schermo del terminale. Viene fatto uso della struttura di controllo while che ancora non è stata descritta; per il momento basti sapere che questa struttura consente di ripetere un certo blocco di istruzioni fintanto che una certa condizione non risulta verificata.

#!/usr/local/bin/perl # simpcat.pl: versione semplificata di 'cat'
print STDERR "nome del file: ";
$filename = <STDIN>;
open(FILE, "< $filename");
while (!eof(FILE)) {
$riga = <FILE>;
print "$riga"; }


Al solo scopo di cominciare ad introdurre alcuni dei comandi che diventeranno di uso comune nelle prossime pagine, possiamo riscrivere in maniera equivalente lo script precedente come segue:

#!/usr/local/bin/perl # simpcat.pl: versione semplificata di 'cat'
$filename = $ARGV[0];
open(FILE, "< $filename") || die "Errore!\n\n";
while ($riga = <FILE>) {
print "$riga"; }


Nel primo esempio il programma chiede di inserire il nome del file da visualizzare, mentre nel secondo caso si aspetta che il nome gli venga passato come parametro. Inoltre, nella seconda versione, se il file risulta impossibile da aprire lo script visualizza il messaggio ``Errore!'' e l'esecuzione ha termine.

Già da queste due versioni equivalenti di un esempio così elementare si intravede la grande libertà lasciata dal Perl al programmatore: non c'è mai un solo modo per compiere una certa operazione in Perl.

© Risorse.net (www.risorse.net)
pagina in versione stampabile:
http://www.risorse.net /perl/input-output.asp?print=ok