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
).