免责声明:我已经在PerlMonks上交叉发布了此信息。Perl6:用正则表达式在一个字符串中捕获Windows换行符
在Perl5中,我可以快速,方便地打印出结束\r\n
Windows的风格路线的十六进制表示:
perl -nE '/([\r\n]{1,2})/; print(unpack("H*",$1))' in.txt
0d0a
,如果你想测试在UNIX上创建一个Windows的结尾的文件,创建一个in.txt
带有单行和行结尾的文件。然后:perl -ni -e 's/\n/\r\n/g;print' in.txt
。 (或在vi/vim中,创建该文件,只需执行:set ff=dos
)。
我在Perl6中尝试了很多事情来做同样的事情,但无论我做什么,我都无法使它工作。这是我最近的测试:
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;
}
}
输出0a
,因为这样做:
/(\n)/
/(\v)/
首先,我甚至不知道如果我使用unpack()
或正则表达式正确。其次,如何捕获P6中换行符的两个元素(\r\n
)?
在Perl5中,我更喜欢'的sprintf( “%v02X”,$ S)'。适用于任何字符串,而不仅仅是字节串。 – ikegami