Restituisce 1 se la successiva lettura su FILEHANDLE restituirà
la fine del file oppure se FILEHANLDE non è aperto. FILEHANDLE
può essere un'espressione il cui valore restituisce il filehandle
effettivo. (Va notato che questa funzione legge realmente un carattere e
poi esegue una ungetc su di esso, dunque ciò non è
molto utile in un contesto interattivo). Non leggete da un file di
terminale (oppure non chiamate eof(FILEHANDLE) su di esso) dopo che
si è raggiunta la fine-del-file. Se lo fate, i tipi di file
quali i terminali potrebbero perdere la condizione di file-del-file.
Un eof senza un argomento utilizza l'ultimo file letto. L'uso di
eof() con parentesi vuote, è molto differente. Si riferisce
allo pseudo file formato dai file elencati sulla linea di comando e
acceduti attraverso l'operatore <>. Poiché <> non
è esplicitamente aperto come lo è un normale filehandle,
un eof() prima che venga usato un <> farà sì
che venga esaminato @ARGV per determinare se sia disponibile l'input.
In maniera analoga, un eof() dopo che <> abbia restituito
fine-del-file, presupporrà che stiate elaborando un'altra lista
di @ARGV, e se non avete impostato @ARGV, esso leggerà
l'input da STDIN; consultate perlop/"I/O Operators"
["Operatori di I/O", NdT].
In un ciclo while (<)>, eof o eof(ARGV) possono essere
usati per determinare la fine di ogni file, eof()
determinerà solo la file dell'ultimo file. Esempi:
# ripristina la numerazione di linea su ogni file di input
while (<>) {
next if /^\s*#/; # tralascia i commenti
print "$.\t$_";
} continue {
close ARGV if eof; # Non eof()!
}
# inserisce delle lineette appena prima dell'ultima linea dell'ultimo file
while (<>) {
if (eof()) { # controlla la fine dell'utimo file
print "--------------\n";
}
print;
last if eof(); # necessario se stiamo leggendo da terminale
}
Suggerimento pratico: in Perl non si ha quasi mai la necessità
di usare eof visto che gli operatori di input restituiscono tipicamente
undef quando esauriscono i dati o se c'è stato un errore.
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per
porre quesiti di tipo tecnico, per rimanere aggiornato su meeting,
incontri, manifestazioni e novità su Perl.it. Iscriviti!