免責聲明:我已經在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