Я знаю, что вы можете использовать оператор проверки файлов -B для проверки, является ли файл двоичным, но как Perl реализует это внутренне?
С perldoc -f -B:
perldoc -f -B
Переключатели -T и -B работают следующим образом. Первый блок или так из файла проверяется на наличие нечетных символов, таких как странные управляющие коды или символы с установленным старшим битом. Если слишком много обнаружены странные символы (> 30%), это файл -B; в противном случае это файл -T. Кроме того, любой файл, содержащий ноль в первый блок считается двоичным файлом Если -T или -B используется в дескрипторе файла, проверяется текущий буфер ввода-вывода а не первый блок. И -T, и -B возвращают true при нулевой файл или файл в EOF при тестировании файлового дескриптора. Потому что вы должны прочитать файл, чтобы выполнить тест -T, на большинстве В случаях, когда вы хотите сначала использовать -f против файла, как в "next unless -f $file && -T $file".
-T
-B
EOF
-f
next unless -f $file && -T $file
Согласно главе 11 книги Изучение Perl :
Ответ ** читы Perl **: он открывает файл, просматривает первые несколько тысяч байт и делает обоснованное предположение. Если он видит много нулевых байтов, необычных управляющих символов и байтов с установленным старшим битом, то это выглядит как двоичный файл. Если нет ничего странного, то это похоже на текст. Иногда он угадывает неправильно. Если в текстовом файле много шведских или французских слов (которые могут иметь символы, представленные с установленным старшим битом, как какой-то вариант ISO-8859-что-то, или, возможно, даже версию Unicode), он может обмануть Perl, объявив его двоичным. Так что это не идеально, но если вам нужно отделить исходный код от скомпилированных файлов или HTML-файлы от PNG, эти тесты должны помочь.