indietro

  • close FILEHANDLE
  • 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.