-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


Funzioni Perl in italiano

indietro

  • binmode FILEHANDLE, STRATO
  • binmode FILEHANDLE

    Fa in modo che FILEHANDLE venga letto o scritto in forma "binaria" o "testuale" sui sistemi in cui le librerie run-time distinguono tra file binari e testuali. Se FILEHANDLE è un'espressione, il valore di questa viene considerato il nome del FILEHANDLE. Restituisce vero in caso di successo, altrimenti restituisce undef in ed imposta $! (errno).

    Su alcuni sistemi (in generale basati su DOS e Windows) binmode() è necessario quando non state lavorando con file di testo. Per una questione di portabilità è una buona idea usarlo sempre, se richiesto, e non usarlo mai quando non è richiesto. Le persone possono anche impostare i loro input/output per essere, di default, Unicode codificato UTF-8, e non dei byte.

    In altre parole: indipendentemente dal sistema operativo, usate binmode() sui file binari, come ad esempio immagini.

    Se STRATO è presente, è una stringa singola, ma può contenere direttive multiple. Le direttive alternano il comportamento del filehandle. Quando STRATO è presente, usare binmode sui file di testo ha un senso.

    Se STRATO viene omesso o specificato come :raw, il filehandle viene reso adatto a trasferire dati binari. Ciò include la disabilitazione di tutte le eventuali conversioni di CRLF, e la marcatura dei dati come byte (e non caratteri Unicode). Va notato che, a differenza di quanto si possa dedurre leggendo "Programming Perl" [Programmare Perl, NdT] (il libro del Cammello) o altro, :raw non è semplicemente l'inverso di :crlf, anche gli altri strati che potrebbero influire sulla natura binaria del file vengono disabilitati. Consultate PerlIO, perlrun e la discussione sulla variabile d'ambiente PERLIO.

    Le direttive :bytes, :crlf, :utf8 e qualsiasi altra direttiva nella forma :..., sono chiamate strati di I/O. Per stabilire gli strati di I/O predefiniti, è possibile utilizzare la direttiva open. Si veda open.

    Il parametro STRATO di binmode() è descritto come "DISCIPLINE" ["DISCIPLINA", NdT] su "Programming Perl, 3rd Edition". In ogni caso, dal momento della pubblicazione di questo libro, da molti conosciuti come il "Camel III", il consenso per quanto riguarda il nome di questa funzionalità si è spostato da "disciplina" a "strato". Tutta la documentazione di questa versione di Perl si riferisce dunque a "strato" anziché a "disciplina". Ora torniamo alla documentazione regolare...

    Per marcare FILEHANDLE come UTF-8, usate :utf8.

    In generale, binmode() dovrebbe essere chiamato dopo open() ma prima che qualsiasi altra operazione di I/O sia compiuta sul filehandle. Chiamare binmode() causa che tutte le operazioni di output (e forse di input) non concluse sul filehandle vengano completate. Un'eccezione a ciò è rappresentata dallo strato :encoding, che cambia la condifica predefinita di caratteri per l'handle, consultate open. A volte è necessario impostare lo strato :encoding nel mezzo delle operazioni sul filehandle ed esso non causa il completamento delle operazioni di I/O in corso. Inoltre :encoding implicitamente spinge lo strato :utf8 in cima a se stesso, dato che internamente il Perl opererà su caratteri Unicode codificati con UTF-8.

    Il sistema operativo, i driver dei device, le librerie C, ed il sistema Perl a tempo di esecuzione, lavorano tutti assieme per permettere al programmatore di utilizzare un singolo carattere (\n) come terminatore di linea, indipendentemente dalla rappresentazione esterna. Su molti sistemi operativi, la rappresentazione nativa dei file di testo equivale a quella esterna, ma su alcuni sistemi la rappresentazione esterna di \n è composta da più di un carattere.

    Mac OS, tutte le varianti di Unix, ed i file Stream_LF su VMS utilizzano un singolo carattere per terminare ciascuna riga nella rappresentazione esterna del testo (anche se quel singolo carattere è un CARRIAGE RETURN su Mac OS ed un LINE FEED su Unix e sulla maggior parte dei file VMS). In altri sistemi quali OS/2, DOS e le varie versioni di MS-Windows, il vostro programma vede \n come un semplice \cJ, ma ciò che in realtà viene memorizzato nei file di testo è una coppia di caratteri \cM\cJ. Ciò singnifica che, se non usate binmode() su tali sistemi, le sequenze che su disco sono \cM\cJ verranno convertite in \n al momento dell'input, ed ogni eventuali \n nel vostro programma verrà convertito in \cM\cJ al momento dell'output. Questo è ciò che desiderate per i file di testo, ma può rivelarsi disastroso per i file binari.

    Un'altra conseguenza dell'utilizzo di binmode() è (su alcuni sistemi) rappresentata dal fatto che gli speciali delimitatori che indicano la fine del file verranno visti come parte del flusso di dati. Per i sistemi operativi della famiglia Microsoft, ciò significa che se i vostri dati binari contengono \cZ, il sottosistema di I/O considererà tale carattere come la fine del file, a meno che non usiate binmode().

    binmode() non è importante solamente per le operazioni readline() e print(), ma anche quando si utilizzano read(), seek(), sysread(), syswrite() e tell() (consultate perlport per ulteriori dettagli). Date un'occhiata alle variabili $/ e $\ in perlvar per capire come fare ad impostare manualmente le vostre sequenze di terminatori di linea per l'input e l'output.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
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!
D:
Annunci Google