Tuyên bố từ chối trách nhiệm: Tôi đã đăng chéo số này qua số PerlMonks.Perl6: Ghi lại dòng mới của Windows bằng một chuỗi có regex
Trong Perl5, tôi có thể nhanh chóng và dễ dàng in ra các đại diện hex của dòng \r\n
Windows theo phong cách kết thúc:
perl -nE '/([\r\n]{1,2})/; print(unpack("H*",$1))' in.txt
0d0a
Để tạo một file Windows-kết thúc trên Unix nếu bạn muốn kiểm tra, tạo ra một in.txt
tệp với một dòng và dòng kết thúc. Sau đó: perl -ni -e 's/\n/\r\n/g;print' in.txt
. (hoặc trong vi/vim, tạo tệp và chỉ cần :set ff=dos
).
Tôi đã thử nhiều thứ trong Perl6 để làm điều tương tự, nhưng tôi không thể làm cho nó hoạt động bất kể tôi làm gì. Dưới đây là bài kiểm tra gần đây nhất của tôi:
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;
}
}
Đầu ra 0a
, cũng như:
/(\n)/
/(\v)/
Trước tiên, tôi thậm chí không biết nếu tôi đang sử dụng unpack()
hoặc regex đúng cách. Thứ hai, làm cách nào để nắm bắt cả hai phần tử (\r\n
) của dòng mới trong P6?
Trong Perl5, tôi thích 'sprintf ("% v02X", $ s) '. Làm việc cho bất kỳ chuỗi nào, không chỉ các chuỗi byte. – ikegami