Probleme beim Ersetzen

Hallo,
ich krieg das einfach nicht auf die Reihe.

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.

Wer kann sich das erklären?
Danke.

Hi,

$in{Kommentar} =~ s/\n/\n/g;

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.

Cheatah

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

Danke Cheatah,
jetzt verstehe ich:smile:
Werde es gleich mal ausprobieren, müßte ja klappen.

Ist also die ursprüngliche Bedeutung des \r ein „Wagenrücklauf“, die des \n dementsprechend ein „Zeilenvorschub“?

_dirk

Hi,

Ist also die ursprüngliche Bedeutung des \r ein
„Wagenrücklauf“, die des \n dementsprechend ein
„Zeilenvorschub“?

eben dies, genau :smile: 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.

Cheatah