Standardmäßig druckt Perl \ r \ n in einer Win32-Umgebung. Wie kann ich dies überschreiben? Ich verwende Perl, um einige Änderungen an Quellcode in einem Repository vorzunehmen, und ich möchte nicht alle Zeilenumbruchzeichen ändern.Wie kann ich nur einen Unix-Newline in Perl auf Win32 drucken?
Ich habe versucht, die Ausgabe Rekord Trennzeichen, aber ohne Glück.
Danke!
Edit: Wollte ein Codebeispiel enthalten - ich bin der Suche und einige Dateien ersetzen über die eine relativ einfache Muster wie diese folgen:
#!/usr/bin/perl
# test.pl
use strict;
use warnings;
$/ = undef;
$\ = "\n";
$^I=".old~";
while (<>) {
while (s/hello/world/) {
}
print;
}
Diese jede Instanzen ersetzen sollte „hallo "with" world "für alle Dateien, die über die cmd-Zeile übergeben wurden.
Edit 2: Ich versuchte, die binmode
als ohne Erfolg vorgeschlagen zunächst. Ich vertiefte mich ein wenig mehr und fand, dass $^I
(die Inplace-Edit-Spezialvariable) überschrieb binmode
. Irgendwelche Arbeiten um den Inplace Edit noch nutzen zu können?
bearbeiten 3: Wie Sinan unten weist darauf hin, brauchte ich binmode ARGVOUT
mit $^I
statt binmode STDOUT
in meinem Beispiel zu verwenden. Vielen Dank.
Wenn Sie das Ausgabesatztrennzeichen geändert haben, war dies das einzige, was Sie tun können. Ich nehme an, Sie haben einen anderen Fehler gemacht (zum Beispiel, die eingehenden Zeilen nicht richtig zu teilen oder sie nicht zu zerhacken). –
Können Sie ein Beispiel für einen Code geben, der '\ r \ n' druckt, wenn Sie es nicht möchten? – Ether
@Sinan, warum würdest du annehmen, dass ich nicht will ?? Ich bin nicht unwillig. Ich habe kein kurzes Skript zur Hand. Ich habe ein sehr langes, kompliziertes Skript, das wahrscheinlich nicht viel Sinn ergibt und noch verwirrender wäre. Ich kann heute Abend eine verkürzte Version machen. Ich dachte, ich würde die relevanten Teile einbeziehen. Ich wusste nicht, dass die In-situ-Bearbeitung zu der Zeit relevant war. Danke. –