对于Unicode而言,天真的Perl 6程序不是往返安全的.它似乎在内部使用标准化表格组合(NFC)作为Str类型:
$perl -CO -E 'say "e\x{301}"' | perl6 -ne '.say' | perl -CI -ne 'printf "U+%04x\n",ord for split //' U+00e9 U+000a
通过文档我无法看到有关此行为的任何内容,我发现它非常令人震惊.我不敢相信你必须回到字节级别来往返文本:
$perl -CO -E 'say "e\x{301}"' | perl6 -e 'while (my $byte = $*IN.read(1)) { $*OUT.write($byte) }' | perl -CI -ne 'printf "U+%04x\n",ord for split //' U+0065 U+0301 U+000a
是否所有文本文件都必须在NFC中才能使用Perl 6安全地进行往返行程?如果该文件应该在NFD中怎么办?我必须在这里遗漏一些东西.我无法相信这是故意的行为.