indietro

  • eof FILEHANDLE Xfine-del-file>
  • eof ()
  • eof

    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.