Powershell, перекрывающий Perl binmode?
У меня есть скрипт Perl, который создает двоичный файл при сканировании очень большого текстового файла. Он выводит в STDOUT, который я перенаправляю в командной строке в файл.
Чтобы оптимизировать его, я делаю изменения, а затем вижу, как мало нужно бежать. В Linux для этого я использую команду "время". В Windows лучшим способом определения времени работы программы была "мера-команда" PowerShell. Казалось, это работает нормально, но я заметил, что сгенерированные файлы были больше. При проверке я обнаружил, что файлы, созданные в PowerShell, начинаются с спецификации и содержат пары CRLF!
Мой Perl-скрипт имеет директиву binmode STDOUT и работает правильно в обычном DOSBox.
Это ошибка или сбой в PowerShell или мера-команда? Повлияло ли это на создание других двоичных файлов другими средствами, кроме Perl?
Поиск в Google ничего не дал. Я использую Perl 5.12, PowerShell v1.0 и Windows XP.
1 ответ
Это связано с тем, что PowerShell по умолчанию будет видеть выходные данные в виде строк. Строки в.NET имеют Unicode, поэтому это вывод по умолчанию для PowerShell.
Я предполагаю, что вы используете PowerShell для записи вывода в файл? Если это так, то использование "Set-Content -Encoding Byte" решит вашу проблему.
Measure-Command {& "c:\myscript.pl" | Set-Content "C:\myoutput.bin" -Encoding Byte}