Ein \n ist unter Unix/Linux
und Windows ein Linefeed, also chr(10).
Davon kann man sich ganz einfach ueberzeugen:
Einzig beim Einlesen oder Schreiben einer nicht mit binmode() als binaer deklarierten Datei oder Pipe wird zwischen CRLF und LF umgewandelt.
Deine Ersetzung, DS, ist wirklich eine Null-Operation. Sie wuerde aber magischerweise "funktionieren", wenn du auf einem Windowssystem eine Unixdatei mit binmode() einliest und dann im Textmodus schreibst, weil dann beim Einlesen \n = \012 = LF = Unix Zeilentrenner erhalten bleibt und beim Schreiben \n => \015\012 => CRLF umgewandelt wird.
Edit: Das Einlesen unter Binmode ist nicht einmal erforderlich, da ja auch im Textmode ein LF ein LF bleibt. Somit reicht es, eine Unix/Linux-Datei unter DOS/Windows einzulesen und gleich wieder zu schreiben, damit die Zeilenenden geaendert werden. Umgekehrt klappt das natuerlich nicht.\n\n
<!--EDIT|Dubu|1065423867-->