我*不会*详细解释 Raku 语法。本文档旨在指导你从 Perl 5 中的工作原理过渡到 Raku 中的等效工具。有关 Raku 语法的完整文档,请参阅 Raku 文档。

    Raku 仍然*主要是*自由形式。但是,有一些情况下,空白的存在或缺失现在很重要。例如,在 Perl 5 中,你可以省略关键字后面的空格(例如 或 my($x, $y))。在 Raku 中,这个空白是必需的,因此 while ($x < 5)my ($x, $y)。但是,在 Raku 中,你可以完全省略括号:while $x < 5 `。这适用于 `iffor 等等。

    奇怪的是,在 Perl 5 中,你可以在数组或散列与其下标之间以及后缀运算符之间留出空格。所以 $seen {$_} ` 是有效的。Raku 再不这样了。Raku 中现在必须是 `%seen{$_}

    如果能让你感觉更好,你可以使用反斜杠来 “unspace” 空格,这样你就可以使用空格,否则它将被禁止。

    有关详细信息,请参阅。

    声明

    正如 指南中所述,Raku 中没有 undef 。声明但未初始化的标量变量将计算其类型。换句话说,my $x;say $x; 会给你”(Any)”。my Int $y;say $y; 会给你”(Int)”。

    注释

    # 在 Perl 5 中开始一个运行到行尾的注释。

    与 Perl 5 一样,你可以使用 pod 指令在注释 =begin comment 之前和 =end comment 之后创建多行注释。

    真和假

    Perl 5 与 Raku 之间的一个真正区别在于,与 Perl 5 不同,Raku 将字符串`“0”` 视为真。数字 0 仍为 false,你可以使用前缀 + 将字符串 "0" 强制转换为数字以使其为 false。Raku 还具有实际的布尔类型,因此,在许多情况下,你可以使用 TrueFalse,而无需担心哪些值计为 true 和 false。

    语句修饰符

    大多数情况下,语句修饰符仍然有效,但有一些例外。

    首先,for 循环是 Perl 5 中已知的 循环,C 风格的 for`循环不用于 Raku。要获得该行为,你需要 `looploop 不能用作语句修饰符。

    在 Raku 中,你无法使用 do {…​} while $x 形式。你将需要用 repeat 替换 do 形式。do {…​} until $x 类似。

    复合语句

    Perl 5 的最大变化是 given 在 Raku 中默认不是实验性质的或禁用的了。有关 given 的详细信息,请参阅此页面

    循环控制

    nextlastredo 在 Perl 5 到 Raku 中没有变化。

    For 循环

    如上所述,C 风格的 for 循环在 Raku 中不称为 for 循环。它们只是 loop 循环。要编写无限循环,你不需要使用C语言风格的 loop (;;) {…​},只是完全省略规范:loop {…​}

    Foreach 循环

    在 Perl 5 中,for 除了用于 C 风格的 for 循环之外,它还是`foreach` 的同义词。在 Raku 中, 仅用于 foreach 样式的循环。

    Switch 语句

    Raku 具有真实的 switch 语句,通过提供 given 与由处理的单个情况的 whendefault。基本语法是:

    完整的细节可以在找到。

    Goto

    goto 目前尚未实施(尚未)。标签实现,可用作 nextlastredo 的目标:

    有关 goto 的计划,请参阅 <

    省略语句

    …​(以及 !!!???)用于创建存根(stub)声明。这比 Perl 5 中使用的 …​ 要复杂得多,所以你可能想要查看 以了解详细信息。尽管如此,尽管它在 Raku 中的作用得到了扩展,但它似乎还没有*明显的*理由说明它为什么不能完成它在 Perl 5 中所扮演的角色。

    PODs: 嵌入式文档