So che è possibile utilizzare l'operatore di test dei file -B per verificare se un file è binario, ma in che modo Perl lo implementa internamente?In che modo Perl sa che un file è binario?
16
A
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 suEOF
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
".
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.
Problemi correlati
- 1. In che modo un agente Consul sa che è il leader di un cluster?
- 2. In che modo ASP.NET MVC sa che un metodo è un metodo di azione?
- 3. Un modulo Perl sa dove è installato?
- 4. In che modo Linux sa quale ioctl deve chiamare?
- 5. In che modo grep sa che sta scrivendo nel file di input?
- 6. In che modo ASM sa che un'operazione aritmetica è firmata o non firmata?
- 7. In che modo C# sa di che tipo è il letterale?
- 8. In che modo Grails sa applicare un "layout" alle pagine che rende?
- 9. In che modo Windows sa come risolvere le query mDNS?
- 10. In che modo Windows sa a quale versione di Visual Studio si riferisce un file .sln?
- 11. In che modo Bundler sa quale ambiente usare?
- 12. In che modo Unity.Resolve sa quale costruttore usare?
- 13. Che linguaggio è per binario, come Perl è quello di testo?
- 14. In che modo il binario si traduce in hardware?
- 15. Come posso creare un file binario in Perl?
- 16. In che modo CBPeripheralManager sa che è connesso o disconnesso da un dispositivo centrale in Core Bluetooth?
- 17. Perché git decide che il mio file è binario
- 18. In che modo Linux esegue un file?
- 19. Che cos'è $ @ in Perl?
- 20. Che cos'è @ $ in perl?
- 21. In che modo Xcode sa chi è stato "creato da" il progetto?
- 22. Che cos'è "% _" in perl?
- 23. in che modo GDB sa che deve interrompersi al punto di interruzione specificato?
- 24. Verificare che un file STL sia ASCII o binario
- 25. In che modo Perl interagisce con gli script in esecuzione?
- 26. Hhing binario - che cos'è?
- 27. Che cosa è esattamente un byte e che cosa ha a che fare con il binario?
- 28. In che modo un antivirus sa di non rilevare il codice non dannoso?
- 29. Dite a Git che un file di testo è in realtà binario
- 30. In che modo il sito web di App Store sa se è installato iTunes?
C'è un'opportunità per usare il carattere della cache di magia statica "_": "next unless -f $ file and -T _" –