Подтвердить что ты не робот

Как Perl знает, что файл двоичный?

Я знаю, что вы можете использовать оператор проверки файлов -B, чтобы проверить, является ли файл двоичным, но как Perl реализует это внутри?

4b9b3361

Ответ 1

От perldoc -f -B:

Переключатели -T и -B работают следующим образом.              Первый блок или              поэтому файл рассматривается для нечетных символов, таких как странные              управляющие коды или символы с высоким набором бит. Если слишком много              найдены странные символы ( > 30%), его файл -B;              в противном случае это файл a -T. Кроме того, любой файл, содержащий null в              первый блок считается двоичным файлом.              Если -T или -B             используется на дескрипторе файла, проверяется текущий буфер ввода-вывода              а не первый блок.              Оба -T и -B возвращают true в              нулевой файл или файл в EOF при проверке дескриптора файла.              Поскольку вы должны прочитать файл, чтобы выполнить тест -T, на большинстве              вы хотите сначала использовать -f для файла, как в               "next unless -f $file && -T $file".

Ответ 2

Согласно главе 11 книги Learning Perl:

Ответ: ** Perl-читы **: он открывает файл, просматривает первые несколько тысяч байт и дает обоснованное предположение. Если он видит много нулевых байтов, необычных управляющих символов и байтов с высоким набором бит, то это выглядит как двоичный файл. Если это не очень странно, тогда это выглядит как текст. Иногда это ошибочно. Если текстовый файл содержит много шведских или французских слов (которые могут иметь символы, представленные с высоким набором бит, как некоторый вариант ISO-8859 или, возможно, даже версию Unicode), он может обмануть Perl в объявлении его двоичным. Поэтому он не идеален, но если вам нужно отделить исходный код от скомпилированных файлов или файлов HTML из PNG, эти тесты должны сделать трюк.