PowerShell übersteuern Perl binmode?

948
hippietrail

Ich habe ein Perl-Skript, das beim Scannen einer sehr großen Textdatei eine Binärdatei erstellt. Es wird an STDOUT ausgegeben, das ich in der Kommandozeile in eine Datei umleite.

Um es zu optimieren, mache ich Änderungen und sehe, wie niedrig es für das Laufen ist. Unter Linux verwende ich hierfür den Befehl "time". Unter Windows schien der beste Weg, um ein Programm zu starten, der "Measure-Befehl" von PowerShell zu sein. Dies schien gut zu funktionieren, aber mir fiel auf, dass die generierten Dateien größer waren. Bei der Untersuchung habe ich festgestellt, dass die in PowerShell generierten Dateien mit einer Stückliste beginnen und CRLF-Paare enthalten!

Mein Perl-Skript hat eine "binmode STDOUT" -Direktive und funktioniert ordnungsgemäß in einer normalen Dosbox.

Ist dies ein Fehler oder eine Fehlfunktion in PowerShell oder ein Befehl zum Messen? Hat es andere betroffen, die Binärdateien mit anderen Mitteln als Perl erstellen?

Googeln ist bisher noch nicht aufgetaucht. Ich verwende Perl 5.12, PowerShell v1.0 und Windows XP.

0
Keine wirkliche Antwort ... Sie möchten dies vielleicht zu stackoverflow fragen. Joe Internet vor 13 Jahren 0
Ja, es war schwer zu entscheiden, an welcher Stelle er gefragt werden sollte. Ich habe mich für dieses entschieden, weil es mehr um die Features der Tools als um Algorithmen oder Datenstrukturen ging. Ich werde es verschieben, wenn hier niemand antwortet (-: hippietrail vor 13 Jahren 0

1 Antwort auf die Frage

0
JasonMArcher

Dies liegt daran, dass PowerShell die Ausgabe standardmäßig als Zeichenfolgen sieht. Zeichenfolgen in .NET sind Unicode, also die Standardausgabe von PowerShell.

Ich gehe davon aus, dass Sie PowerShell verwenden, um die Ausgabe in eine Datei zu schreiben. Wenn ja, dann wird das Problem mit "Set-Content -Encoding Byte" behoben.

Measure-Command {& "c:\myscript.pl" | Set-Content "C:\myoutput.bin" -Encoding Byte} 
Also | Set-Content "C: \ myoutput.bin" ist wie> "C: \ myoutput.bin" unter DOS oder Unix, wobei das Pipe-Zeichen auch für die Umleitung verwendet wird? hippietrail vor 13 Jahren 0
Es ist der Pipe-Charakter und wird wie DOS- und Unix-Shells verwendet. In diesem Fall verwenden Sie Set-Content, damit wir die Byte-Kodierung verwenden können. JasonMArcher vor 13 Jahren 0