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