我知道你可以使用文件测试运算符 -B 来测试文件是否为二进制文件,但是Perl内部是如何实现的呢?
来自 perldoc -f -B
:
选项-T
和-B
的作用如下。 文件的前一块或者说是其头部会被检查是否存在奇怪的字符,例如奇怪的控制码或高位设置的字符。如果发现太多奇怪的字符(>30%),那么它就是一个二进制文件;否则它就是一个文本文件。同时,任何在头部包含空字符的文件都被视为二进制文件。 如果在文件句柄上使用了-T
或-B
,则当前 IO 缓冲区将被检查,而不是文件的头部。 当测试一个文件句柄时,无论是空文件还是到达EOF
,-T
和-B
均返回 true。 因为你需要读取一个文件才能进行-T
测试,所以大多数情况下,你需要先对文件使用-f
进行测试,例如 "next unless -f $file && -T $file
"。