2009-05-22 19 views

risposta

26

Da perldoc -f -B:

Il lavoro -T e -B interruttori come segue. Il primo blocco o del file viene esaminato per caratteri dispari come strani codici di controllo o caratteri con il bit alto impostato. Se vengono trovati troppi caratteri strani (> 30%), si tratta di un file -B; altrimenti è un file -T. Inoltre, qualsiasi file contenente null in il primo blocco è considerato un file binario. Se -T o -B viene utilizzato su un filehandle, l'attuale buffer IO viene esaminato anziché il primo blocco. Entrambi -T e -B restituiscono true su un file null o un file su EOF durante il test di un filehandle. Poiché è necessario leggere un file per eseguire il test -T, nella maggior parte delle occasioni si desidera utilizzare prima un file -f come in " next unless -f $file && -T $file".
+1

C'è un'opportunità per usare il carattere della cache di magia statica "_": "next unless -f $ file and -T _" –

10

Secondo il capitolo 11 del libro Learning Perl:

La risposta è ** ** Perl trucchi: si apre il file, guarda le prime poche migliaia di byte, e fa un'ipotesi plausibile . Se vede un sacco di byte nulli, caratteri di controllo insoliti e byte con il set di bit più alto, allora sembra un file binario. Se non ci sono molte cose strane, allora sembra un testo. A volte capita di sbagliare. Se un file di testo ha un sacco di parole svedesi o francesi (che possono avere caratteri rappresentati con il set di bit alto, come qualche variante ISO-8859-qualcosa, o forse anche una versione Unicode), potrebbe ingannare Perl nel dichiararlo binario. Quindi non è perfetto, ma se hai bisogno di separare il tuo codice sorgente da file compilati o file HTML da PNG, questi test dovrebbero fare il trucco.
+0

Non so se lo considererei "barare". Non è che ci sia davvero un modo migliore. – friedo

+0

bene da quando si apre il file, il suo tipo di imbroglio, non pensate – TStamper

Problemi correlati