Perl的-T和-B是如何实现的?

时间:2016-01-18 10:39:29

标签: perl ascii

perl的-T功能真的有用吗?从perlfunc上的手册页:

-T  File is an ASCII text file (heuristic guess).
-B  File is a "binary" file (opposite of -T).

-B选项是否等同于! -T,或者它只是启发式的反转,因此有时候,文件对于-B和-T都可能是真的。例如,启发式算法是否具有控制字符的阈值?它会忽略制表符,EOL,EOF和NUL吗?

1 个答案:

答案 0 :(得分:2)

来自same page:

  

-T和-B开关的工作原理如下。

     

检查文件的第一个块左右,看它是否是包含非ASCII字符的有效UTF-8。如果,那么这是一个-T文件。否则,检查文件的相同部分是否有奇数字符,例如奇怪的控制代码或高位设置的字符。如果超过三分之一的字符是奇怪的,那么它是一个-B文件;否则它是一个-T文件。此外,在被检查部分中包含零字节的任何文件都被视为二进制文件。 (如果在包含LC_CTYPE的使用语言环境的范围内执行,则奇数字符是当前语言环境中不可打印或空格的任何内容。)如果在文件句柄上使用-T或-B,则检查当前IO缓冲区而不是第一块。在测试文件句柄时,-T和-B在空文件或EOF文件中返回true。因为您必须读取文件才能进行-T测试,所以在大多数情况下,您首先要对文件使用-f,如下所示,除非-f $ file&& -T $文件。