Haftungsausschluss: Ich habe dies über PerlMonks Cross-Posted.Perl6: Erfassen von Windows-Zeilenumbruch in einer Zeichenfolge mit Regex
In Perl5, ich kann schnell und einfach die hexadezimale Darstellung der Endung \r\n
im Windows-Stil Linie ausdrucken:
perl -nE '/([\r\n]{1,2})/; print(unpack("H*",$1))' in.txt
0d0a
ein Windows-ending-Datei auf Unix erstellen, wenn Sie testen möchten, erstellen in.txt
Datei mit einer einzelnen Zeile und Zeilenende. Dann: perl -ni -e 's/\n/\r\n/g;print' in.txt
. (oder in vi/vim, erstellen Sie die Datei und tun Sie einfach :set ff=dos
).
Ich habe viele Dinge in Perl6 versucht, das Gleiche zu tun, aber ich kann es nicht zum Laufen bringen, egal was ich tue. Hier ist mein letzter Test:
use v6;
use experimental :pack;
my $fn = 'in.txt';
my $fh = open $fn, chomp => False; # I've also tried :bin
for $fh.lines -> $line {
if $line ~~ /(<[\r\n]>**1..2)/ {
$0.Str.encode('UTF-8').unpack("H*").say;
}
}
Ausgänge 0a
, wie tun:
/(\n)/
/(\v)/
Erstens, ich weiß nicht einmal, ob ich unpack()
oder die Regex richtig bin mit. Zweitens, wie erfasse ich beide Elemente (\r\n
) des Newline in P6?
In Perl5, ziehe ich 'sprintf ("% v02X", $ s)'. Funktioniert für jede Zeichenfolge, nicht nur für Bytefolgen. – ikegami