#!perl6
use v6;
my $list = 'a' .. 'f';
sub my_function( $list ) {
for ^$list.elems -> $e {
$list[$e].say;
}
}
my_function( $list );
首先我用perl5风格尝试了这个,但它不起作用:
for @$list -> $e {
$e.say;
}
# Non-declarative sigil is missing its name at line ..., near "@$list -> "
我怎么能在perl6中做到这一点?
答案 0 :(得分:7)
你不要在Perl 6中取消引用这样的变量。只需使用for $list
但这可能不会做你想做的事。 'a'..'f'
不构造Perl 6中的列表,而是一个名为Range
的内置数据类型。您可以使用say $list.WHAT
进行检查。要将其转换为列表并迭代每个元素,您可以使用for $list.list
答案 1 :(得分:3)
这些应该有效:
.say for @( $list );
.say for $list.list;
.say for $list.flat;
由于$list
是标量,for $list
只会迭代一个项目。
答案 2 :(得分:2)
现在,Rakudo 2015.02可以正常使用。
您最好使用@
作为变量名称的数字作为数组。
Perl 6是一种上下文相关的语言,所以如果你想让数组作为“真正的数组”,你最好给它一个合适的名字。
#!perl6
use v6;
my @list = 'a' .. 'f';
for @list -> $e { $e.say };