Gestione del File System

L'apertura di risorse del File System utilizza la consueta sintassi dei comandi di shell. La maggior parte degli interpreti a linea di comando associa il simbolo ">" per indicare la scrittura su file. Ad esempio, scrivendo il comando DOS:

dir > prova.txt

il contenuto della directory corrente verrà scritto nel file prova.txt. Analogamente, il simbolo ">>" è usato per appendere il contenuto in fondo al file, mentre il simbolo "<" indica un flusso di dati in input. Ricordando questa notazione il codice Perl dovrebbe diventare facilmente leggibile:

open(my $input  , "<"   , "input.txt"       )   or die "File non trovato: $!" ;
open(my $output , ">"   , "output.txt"      )   or die "File non trovato: $!" ;
open(my $append , ">>"  , "append.txt"      )   or die "File non trovato: $!" ;

Lettura di file

A seconda delle variabili utilizzate un file può essere letto sia in un contesto scalare (una singola linea) oppure vettoriale (tutte le linee). Vediamo un esempio:

# Esempio di lettura tramite variabile scalare
my $first_line = <$input> ;
print "\nPrima linea del file : ".$first_line."\n" ;
# Esempio di lettura tramite variabile vettore
my @all_lines = <$input> ;
print "Altre linee del file :\n\n" ;
print @all_lines ;

che produce come risultato

Prima linea del file : Prima riga

Altre linee del file :

Seconda riga
Terza riga

Se controlliamo il contenuto del file input.txt notiamo che esso consta di 3 righe, ovvero:

Prima riga
Seconda riga
Terza riga

Confrontando il contenuto del file input.txt con l'output prodotto dal nostro script notiamo che il riferimento al cursore di lettura resta coerente durante le letture successive. In altre parole, dopo aver letto la prima riga del file in un contesto scalare, le letture successive proseguiranno a leggere dalle righe successive.

Se vogliamo leggere l'intero contenuto del file possiamo usare un ciclo come questo:

print "\nLettura integrale del file:\n\n" ;
open(my $file, "<", "input.txt") or die "File non trovato: $!" ;
my $riga = 0 ;
while (<$file>) { 
	$riga++ ;
	print "$riga -> $_" ;
}

eseguendo lo script qui sopra si ottiene

Lettura integrale del file:

1 -> Prima riga
2 -> Seconda riga
3 -> Terza riga

Ancora una volta notiamo l'uso della variabile $_ per recuperare il valore dell'ultima funzione eseguita (in questo caso l'esecuzione di controllo eseguita implicitamente dal ciclo while).



Home Pagina 10 di 15