2009-05-22 14 views

Respuesta

26

De perldoc -f -B:

El -T y -B interruptores de trabajo de la siguiente manera. El primer bloque o del archivo se examina para detectar caracteres extraños, como códigos de control extraños o caracteres con el bit alto establecido. Si se encuentran demasiados caracteres extraños (> 30%), es un archivo -B; de lo contrario es un archivo -T. Además, cualquier archivo que contenga nulo en el primer bloque se considera un archivo binario. Si se usa -T o -B en una manejador de archivos, el búfer de E/S actual se examina en lugar del primer bloque. Ambos -T y -B devuelven verdadero en un archivo nulo, o un archivo en EOF al probar un identificador de archivo. Como debe leer un archivo para realizar la prueba -T, en la mayoría de las ocasiones desea utilizar primero un archivo -f, como en " next unless -f $file && -T $file".
+1

Existe la posibilidad de utilizar el carácter de caché de estadísticas mágicas "_": "siguiente a menos que -f $ archivo y -T _" –

10

De acuerdo con el capítulo 11 del libro Learning Perl:

La respuesta es ** ** Perl hace trampa: se abre el archivo, mira a los primeros miles de bytes, y hace una conjetura . Si ve una gran cantidad de bytes nulos, caracteres de control inusuales y bytes con el bit alto establecido, entonces se ve como un archivo binario. Si no hay muchas cosas raras, parece texto. A veces adivina mal. Si un archivo de texto tiene muchas palabras en sueco o francés (que pueden tener caracteres representados con el bit alto establecido, como una variante ISO-8859-algo, o quizás incluso una versión Unicode), puede engañar a Perl para que lo declare binario. Por lo tanto, no es perfecto, pero si necesita separar el código fuente de los archivos compilados o los archivos HTML de PNG, estas pruebas deberían ser la solución.
+0

No sé si consideraría eso "hacer trampa". No es que realmente haya una mejor manera. – friedo

+0

bien desde que abrí el archivo, es un tipo de trampa, ¿no crees? – TStamper

Cuestiones relacionadas