Thread \n am Ende entfernen (15 answers)
Opened by chmod777 at 2011-11-13 15:28

Linuxer
 2011-11-14 09:58
#154175 #154175
User since
2006-01-27
3882 Artikel
HausmeisterIn

user image
Dass ist aber auch noch stark fehlerträchtig, wenn man nicht aufpasst.

chomp() entfernt das, was im Skalar $/ steht. Standardmäßig ist es der Zeilenumbruch des jeweiligen Systems (DOS / Unix) auf dem das Skript läuft.

Wenn nun auf einem WinDOS eine "unix-formatierte" Datei verarbeitet wird (also Zeilenende mit \x0a), wird chomp() versuchen, ein \x0d\x0a zu entfernen (weil das in $/ steht), was nicht funktionieren wird, weil kein \x0d im Zeilenumbruch vorhanden ist.

Umgekehrt gibt es auf Linux mit DOS-Dateien ähnliche Probleme...

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
# vim: set ts=4 sw=4 et sta:
use strict;
use warnings;


# DOS line
my $line = "Hallo Welt.\x0d\x0a\x0d\x0a";

print "Start: ", $line;

while ( $line =~ m/\n$/ ) { chomp $line; }

print "Stop: ", $line;


Code: (dl )
1
2
3
4
$ perl linebreak.pl | xxd
0000000: 5374 6172 743a 2048 616c 6c6f 2057 656c Start: Hallo Wel
0000010: 742e 0d0a 0d0a 5374 6f70 3a20 4861 6c6c t.....Stop: Hall
0000020: 6f20 5765 6c74 2e0d 0a0d o Welt....

meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread \n am Ende entfernen