Rolf B: linefeed Überraschung

Beitrag lesen

Hallo beatovich,

Solange man weiss, was (aus welchem Kontext) man letztlich speichert, muss man die Betriebsspezifischen Zeilenden nicht mal respektieren.

Ja okay, wenn Du nichts weiter willst, als aus HTML stammende Daten wieder an HTML zurückzugeben, dann ist das so. Dann kannst Du das als Blob betrachten und binär speichern.

Ich dachte, du wolltest den Text für andere Anwendungen als Textdatei bereitstellen. Oder vielleicht in einer Perl-Verarbeitung in Zeilen zerlegen (da würden die \r dann auch stören).

Perl möchte ein plattformneutrales Textdatei-API anbieten Dazu müsste Perl ja seine eigene Plattform darstellen

So war's nicht gemeint. Perl läuft auf verschiedenen Plattformen, und ich habe das so verstanden, dass der :crlf Layer diesen Umstand vor dem unter Perl laufenden Script verbergen möchte, so dass Du das Script unmodifiziert unter Unix oder Windows laufen lassen kannst.

Was mich aber wundert, ist eben dieses Verhalten, dass \r\n beim unmodifizierten Schreiben zu einem \r\r\n wird.

Das hatte ich doch aus der Mönchspredigt herausgedeutet: Der :crlf Layer weiß nichts von deinen binären Absichten und will darum mithelfen. Diese Hilfe besteht unter Windows in der \n -> \r\n Übersetzung. Ein Linux-Perl würde das nicht tun. Eigentlich müsste ein Windows-Perl, wenn Du die Datei mit dem gleichen Layer einliest, das unnötige \r auch wieder entfernen. DU hast die Datei aber mit einem anderen Programm gelesen (Hexedit?, Notepad?) und hast ein betriebssystemkonformes Textdateiformat erwartet. Das bekommst Du aber nur, wenn die data chain korrekt geknüpft ist.

Wenn Du :raw verwendest, würden Dich auf einem Unix-System die unsinnigen \r in der Datei stören. Oder die komischen \n auf einem Mac-OS Server (hm, keine Ahnung ob es sowas je gab :D).

Rolf

--
sumpsi - posui - clusi