close
Chiude il file o la pipe associata con il filehandle, restituisce vero solo se i buffer di IO
sono stati svuotati con successo e chiude il descrittore di file di sistema. Se l'argomento
viene omesso, chiude il filehandle correntemente selezionato.
Non è necessario che voi chiudiate il FILEHANDLE se immediatamente andrete a fare
un'altra open sul filehandle perché open lo chiuderà per voi.
(Si veda open). Ad ogni modo, un'esplicita close su di un file di input riazzererà
il contatore di linea ($.), mentre non lo farà la close implicita fatta da open.
Se il filehandle proviene da una open su pipe, close restituirà in aggiunta falso se
fallisce una delle altre chiamate di sistema coinvolte, oppure se il programma esce con uno stato
non-zero. (Se il solo problema è che il programma sia uscito come non-zero, $!
verrà impostato a 0). Anche chiudere una pipe fa attendere che il processo in
esecuzione su quella pipe sia completato, nel caso vogliate esaminare successivamente l'output
della pipe, e implicitamente pone in $? il valore di stato dell'uscita di quel comando.
Chiudere prematuramente la lettura finale di una pipe (cioè prima che il processo
che sta scrivendo su di essa dall'altra estremità l'abbia chiusa) si risolverà
in una SIGPIPE che verrà recapitata a chi sta scrivendo. Se l'altra estremità
non può occuparsene, ci si assicuri di leggere tutti i dati prima di chiudere la pipe.
Esempio:
open(OUTPUT, '|sort >pippo') # pipe da ordinare
or die "Non posso avviare sort: $!";
#... # stampo qualcosa in output
close OUTPUT # aspetto che il sort termini
or warn $! ? "Errore nel chiudere la sort del pipe: $!"
: "Stato di uscita $? dal sort";
open(INPUT, 'pippo') # ricevo i risultati di sort
or die "Non posso aprire 'pippo' per l'input: $!";
FILEHANDLE può essere un'espressione i cui valori possono essere usati come
un filehandle indiretto, solitamente il nome effettivo del filehanlde.