Ich habe eine Variable aus einm Formular übernommen, einer textarea um genau zu sein. Jetzt möchte ich die dort vorhandenen Zeilenumbrüche ersetzen. Für die spätere Ausgabe in einem Dialogfenster müssen sie nämlich als \n geschrieben sein.
$in{Kommentar} =~ s/\n/\n/g;
Dieser Befehl sollte eigentlich klappen, liefert einen Text, in dem die „physikalischen“ Zeilenumbrüche erhalten geblieben sind und wo gleich dahinter jeweils „\n“ vermerkt ist.
Fazit: Er findet das richtige Zeichen, ersetzt es aber nicht, sondern hängt etwas an. Sehr eigenartig, wenn ihr mich fragt.
ja, das ist schon richtig - hier werden sämtliche \n ersetzt. Allerdings bleiben \r wie sie sind; und auf Windows- oder Macintosh-Systemen werden diese (gewöhnlich) weiterhin als Zeilenumbruch angesehen.
Entweder ersetzt Du also auch alle \r entsprechend; oder wenn es Dir egal ist, ob es mal \r\n oder nur \r war, verwendest Du
s/\015\012|\015|\012/\n/g
was zudem gegen „ungünstige“ Definitionen der Codes \r und \n (nicht immer sind diese zwingend Symbole für die von Dir gewünschten Zeichen!) gefeit ist.
Ist also die ursprüngliche Bedeutung des \r ein
„Wagenrücklauf“, die des \n dementsprechend ein
„Zeilenvorschub“?
eben dies, genau Allerdings nur auf Windows-Systemen, wo es trotzdem anders gehandhabt wird. Andere Betriebssysteme beschränken sich auf nur ein Zeichen für das, was man erwartet - leider nicht immer auf das gleiche.