entfernt am Ende einer Zeile was in "$/", also in "$INPUT_LINE_SEPERATOR" drin steht. Ein zweimaliges ausführen bringt nichts.
Entweder man verändert die Zeichenfolge in "$/" z.B:
Code:
local $/="\x0D\x0A";
oder man entfernt das Windowszeilenende mit einem regulären Ausdruck:
Code:
while ( <DATEI> )
{
# Zeichen für Zeilenende abschneiden
s/\x0D?\x0A//;
# Leerzeile
if ( /^$/ )
{
# mach was (Block1)
next;
}
# keine Leerzeile, mach was anderes (Block2)
# hier ist ein "next" unnötig,
# da der Schleifenblock sowieso schon zu Ende ist.,
# und der nächste Durchlauf beginnt.
# next;
}
Wenn du dir nicht sicher bist ob die Datei immer Windows formatiert ist, dann würde ich den regulären Ausdruck nutzen, da er sowohl mit Windows als auch mit Unix formatieren Zeilen klar kommt.
Nebenbei. Ich benutze "\x0D" anstatt "\r" und "\x0A" anstatt "\n" diese beiden Werte wurden in perl gesetzt, als perl für eine Plattform kompiliert wurde. Diese Werte müssen nicht immer so sein, wie man es erwartetet. So ist unter Windows "\n" gleich "\x0D\x0A" was einem "\r\n" unter Unix entsprechen würde. Wie man erkennt kann das durchaus zu Problemen führen. Aus dem Grund benutze ich die hexadezimale ASCII Darstellung, das gibt weniger Missverständnisse.
Lesezeichen