不同的操作系统使用不同的字符或它们的组合来表示换行。每种语言都有自己的规则来处理这个问题。Raku 有以下规则

  • 字符串文字中的 \n 表示 Unicode 代码点 10。

  • 默认的 nl-out(由 say 附加到字符串)也是 \n

  • 在输出时,当在 Windows 上时,编码器默认情况下会将 \n 转换为 \r\n,当它要写入文件、进程或终端时(但是,它不会在套接字上执行此操作)。

  • 在输入时,无论在哪个平台上,解码器默认情况下会将来自文件、进程或终端(再次强调,不是套接字)的输入中的\r\n规范化为\n

  • 以上两点共同意味着,除了套接字编程之外,您在程序中永远不会看到\r\n(这也是许多其他语言的工作方式)。

您可以通过在创建特定句柄时设置:nl-out 属性来更改该句柄的默认行为。

my $crlf-out = open(IO::Special.new('<STDOUT>'), :nl-out("\\\n\r"));
$*OUT.say: 1;     # OUTPUT: «1␤» 
$crlf-out.say: 1# OUTPUT: «1\␤␍»

在这个例子中,我们使用IO::Special 将标准输出复制到一个新的句柄,我们在字符串末尾追加了一个\,后面跟着一个换行符 和一个回车符;我们打印到该句柄的所有内容都将在行尾获得这些字符,如所示。

在正则表达式中,\n 是根据Unicode 对逻辑换行的定义 来定义的。它将匹配. 以及\v,以及包含空格的任何类。