Sé que puede usar el operador de prueba de archivo -B para probar si un archivo es binario, pero ¿cómo lo implementa Perl internamente?¿Cómo sabe Perl que un archivo es binario?
16
A
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 enEOF
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
".
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.
Cuestiones relacionadas
- 1. ¿Cómo sabe un programa Perl dónde encontrar el archivo que contiene el módulo Perl que utiliza?
- 2. ¿Cómo puedo crear un archivo binario en Perl?
- 3. ¿Cómo fusiono un archivo binario?
- 4. ¿Sabe un módulo Perl dónde está instalado?
- 5. ¿Cómo comprobar si el archivo es binario?
- 6. Binario "cola" un archivo
- 7. ¿Por qué Git piensa que mi archivo cs es binario?
- 8. ¿Cómo hago que Git trate un archivo como binario?
- 9. Por qué git decide que mi archivo es binario
- 10. ¿Cómo anexar datos a un archivo binario?
- 11. Generando un archivo binario aleatorio
- 12. ¿Cómo le digo a TortoiseHg que un archivo no es binario?
- 13. ¿Cómo debo guardar un archivo en OpenOffice para que no sea un archivo binario en Subversion?
- 14. ¿Cómo le digo a Subversion que trate un archivo como un archivo binario?
- 15. leer un archivo binario (pitón)
- 16. cómo obtener el número mágico de un archivo binario
- 17. ¿Comprueba si un archivo es binario o ASCII con Node.js?
- 18. ¿Qué es un carácter nulo binario?
- 19. ¿Cómo se sabe qué SRID usar para un archivo shp?
- 20. ¿Cómo sabe Ruby dónde encontrar un archivo requerido?
- 21. En Perl, ¿cuál es la diferencia entre un archivo .pm (módulo Perl) y un archivo .pl (script Perl)?
- 22. ¿Cómo puedo probar que "algo" es un hash en Perl?
- 23. perl $ | = 1; ¿Que es esto?
- 24. Analizando un archivo binario en Ruby
- 25. ¿Cómo descargo un archivo en Perl?
- 26. ¿Cómo descargo un archivo usando Perl?
- 27. lectura en un archivo binario en Haskell
- 28. ¿Cómo bloqueo un archivo en Perl?
- 29. Expresión regular de analizar un archivo binario?
- 30. Python: cortar un archivo binario muy grande
Existe la posibilidad de utilizar el carácter de caché de estadísticas mágicas "_": "siguiente a menos que -f $ archivo y -T _" –