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.