0

I have a Perl script which creates a binary file while scanning a very large text file. It outputs to STDOUT which I redirect in the commandline to a file.

To optimize it I'm making changes then seeing how low it takes to run. On Linux for this I use the "time" command. On Windows the best way to time a program seemed to be to PowerShell's "measure-command". This seemed to work fine but I noticed the generated files were larger. On examination I found that the files generated from within PowerShell begin with a BOM and contain CRLF pairs!

My Perl script has a "binmode STDOUT" directive and does work correctly in a normal dosbox.

Is this a bug or misfeature in PowerShell or measure-command? Has it affected others creating binary files by means other than Perl?

Googling hasn't turned anything up so far. I'm using Perl 5.12, PowerShell v1.0 and Windows XP.

hippietrail
  • 4,605

1 Answers1

0

This is because PowerShell will see the output as strings by default. Strings in .NET are Unicode, so that is the default output of PowerShell.

I assume that you are using PowerShell to write the output to a file? If so, then using "Set-Content -Encoding Byte" will fix your issue.

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