perl6 / rakudo:dereferencing-question

时间:2011-02-17 16:33:55

标签: perl for-loop pass-by-reference perl6 rakudo

#!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中做到这一点?

3 个答案:

答案 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 };