# Perl 6
sub frobnicate { $^a ** 2 }
sub do-stuff-with(&lambda, $param) { lambda($param) }
say do-stuff-with( &frobnicate, 42 ); # 1764
注意,在Perl 6中,您不需要接受引用;您可以简单地传递代码对象如&作为参数。
$(Scalar vs. Item)
与@、%和&Sigils相比,$sigil有点平淡。它不强制执行任何类型检查,因此可以将其绑定到任何类型的对象。因此,当你写:
# Perl 6 my $answer = 42;
像这样的事情发生了:
# Perl 6 my $answer := Scalar.new(42);
除了在一个很低的水平。因此,如果您想知道,此代码将无法工作。当你声明标量变量时,就是这样。
在Perl 6中,$还指出,其中的任何内容都应被视为单一的项目。因此,即使标量容器中填充了列阵对象时,在需要迭代的情况下,它将被视为单个项:
# Perl 6 my @foo = 1,2,3; my $bar = Array.new(1,2,3); # alternately: [1,2,3] .say for @foo; # 123 .say for $bar; # [1 2 3]
请注意,后一种情况只适用于一迭代VS三在前一种情况下。您可以通过前缀适当的sigil来指示是否要迭代某些内容:
# Perl 6 .say for $@foo; # [1 2 3] , consider the array as an item .say for @$bar; # 123 , consider the scalar as a list
但也许这会把我们带到噪音太远的地方。幸运的是,还有更详细的等价物:
# Perl 6 .say for @foo.item; # [1 2 3] , consider the array as an item .say for $bar.list; # 123 , consider the scalar as a list
* (Typeglobs)
正如您可能已经注意到的,Perl 6没有*sigil或type globs的概念。如果你不知道是什么类型的球体,你不必担心这个。您可以很好地度过难关,而不必知道Perl 5中复杂的符号表(也可以跳过下一段)。
在Perl 6中,Sigil是存储在符号表中的名称的一部分,而在Perl 5中,名称是在没有信号的情况下存储的。例如,在Perl 5中,如果在程序中引用$foo,编译器将查找foo(没有sigil),然后获取相关信息(这是一个数组),并查找它所需的$sigil索引。在Perl 6中,如果引用$foo,编译器将查找$foo并直接使用与该键相关的信息。请不要混淆用于表示Perl 6中的参数与Perl 5中的Type Gulb SIGL的SLurpy,它们彼此没有任何关系。
Sigilless variables
Perl 5不支持无符号变量(除了可能的左值子程序,但这确实非常笨拙)。
Perl 6也不直接支持Sigilless变量,但它支持通过前缀反斜杠()定义中的名称:
# Perl 6 my the-answer = 42; say the-answer; # 42
由于赋值的右边是常量,这与定义常量基本相同:
# Perl 5 use constant the_answer => 42; say the_answer; # 42 # Perl 6 my constant the-answer = 42; say the-answer; # 42









