Perl如何知道文件是二进制文件?

时间:2009-05-22 18:11:55

标签: perl

我知道你可以使用文件测试运算符-B来测试文件是否是二进制文件,但Perl如何在内部实现它?

2 个答案:

答案 0 :(得分:27)

来自perldoc -f -B

-T-B开关的工作方式如下。                第一块或                因此检查文件是否有奇怪的字符,例如奇怪的                控制代码或高位设置的字符。如果太多了                找到奇怪的字符(> 30%),它是-B文件;                否则它是-T文件。此外,任何包含null的文件                第一个块被认为是二进制文件。                如果-T-B                在文件句柄上使用,检查当前的IO缓冲区                而不是第一块。                -T-B都返回true                测试文件句柄时的空文件或EOF处的文件。                因为你必须阅读一个文件来进行-T测试                您希望首先对文件使用-f的情况,如                “next unless -f $file && -T $file”。

答案 1 :(得分:10)

根据 Learning Perl 一书的第11章:

答案是** Perl作弊**:它打开文件,查看前几千字节,并进行有根据的猜测。如果它看到很多空字节,异常控制字符和高位设置的字节,那么它看起来像一个二进制文件。如果没有太多奇怪的东西,那么它看起来像文字。它有时会猜错。如果一个文本文件有很多瑞典语或法语单词(可能有高位设置的字符,如某些ISO-8859-something变体,甚至可能是Unicode版本),它可能会欺骗Perl声明它是二进制的。所以它并不完美,但如果您需要将源代码与编译文件或PNG中的HTML文件分开,这些测试应该可以解决问题。