У меня есть скрипт Perl, который создает двоичный файл при сканировании очень большого текстового файла. Он выводит в STDOUT, который я перенаправляю в командной строке в файл.

Чтобы оптимизировать его, я делаю изменения, а затем вижу, как мало нужно бежать. В Linux для этого я использую команду "время". В Windows лучшим способом определения времени работы программы была «мера-команда» PowerShell. Казалось, это работает нормально, но я заметил, что сгенерированные файлы были больше. При проверке я обнаружил, что файлы, созданные в PowerShell, начинаются с спецификации и содержат пары CRLF!

Мой Perl-скрипт имеет директиву binmode STDOUT и работает правильно в обычном dosbox.

Это ошибка или сбой в PowerShell или мера-команда? Повлияло ли это на создание других двоичных файлов другими средствами, кроме Perl?

Поиск в Google ничего не дал. Я использую Perl 5.12, PowerShell v1.0 и Windows XP.

1 ответ1

0

Это потому, что PowerShell будет видеть выходные данные в виде строк по умолчанию. Строки в .NET имеют Unicode, поэтому это вывод по умолчанию для PowerShell.

Я предполагаю, что вы используете PowerShell для записи вывода в файл? Если это так, то использование «Set-Content -Encoding Byte» решит вашу проблему.

Measure-Command {& "c:\myscript.pl" | Set-Content "C:\myoutput.bin" -Encoding Byte}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .