我*不会*详细解释 Raku 语法。本文档旨在指导你从 Perl 5 中的工作原理过渡到 Raku 中的等效工具。有关 Raku 语法的完整文档,请参阅 Raku 文档。
Raku 仍然*主要是*自由形式。但是,有一些情况下,空白的存在或缺失现在很重要。例如,在 Perl 5 中,你可以省略关键字后面的空格(例如 或 my($x, $y)
)。在 Raku 中,这个空白是必需的,因此 while ($x < 5)
或 my ($x, $y)
。但是,在 Raku 中,你可以完全省略括号:while $x < 5 `。这适用于 `if
,for
等等。
奇怪的是,在 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 还具有实际的布尔类型,因此,在许多情况下,你可以使用 True
和 False
,而无需担心哪些值计为 true 和 false。
语句修饰符
大多数情况下,语句修饰符仍然有效,但有一些例外。
首先,for
循环是 Perl 5 中已知的 循环,C 风格的 for`循环不用于 Raku。要获得该行为,你需要 `loop
。loop
不能用作语句修饰符。
在 Raku 中,你无法使用 do {…} while $x
形式。你将需要用 repeat
替换 do
形式。do {…} until $x
类似。
复合语句
Perl 5 的最大变化是 given
在 Raku 中默认不是实验性质的或禁用的了。有关 given
的详细信息,请参阅此页面。
循环控制
next
,last
和 redo
在 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
与由处理的单个情况的 when
和 default
。基本语法是:
完整的细节可以在找到。
Goto
goto
目前尚未实施(尚未)。标签已实现,可用作 next
,last
和 redo
的目标:
有关 goto
的计划,请参阅 <
省略语句
…
(以及 !!!
和 ???
)用于创建存根(stub)声明。这比 Perl 5 中使用的 …
要复杂得多,所以你可能想要查看 以了解详细信息。尽管如此,尽管它在 Raku 中的作用得到了扩展,但它似乎还没有*明显的*理由说明它为什么不能完成它在 Perl 5 中所扮演的角色。