2011-02-17 32 views
1
#!perl6 
use v6; 

my $list = 'a' .. 'f'; 

sub my_function($list) { 
    for ^$list.elems -> $e { 
     $list[$e].say; 
    } 
} 

my_function($list); 

首先我想這在perl5的風格,但它沒有工作:perl6/rakudo:提領個問題

for @$list -> $e { 
    $e.say; 
} 
# Non-declarative sigil is missing its name at line ..., near "@$list -> " 

我怎麼能做到這一點的perl6?

+0

你究竟想要做什麼?至少第一個代碼塊中的代碼在Rakudo HEAD上工作正常。 – arnsholt

+0

第一個塊應該是第二個塊中我想要的解釋。 –

+0

@ sid_com的perl5風格的@ $ list - > $ e {$ e.say; }語法很好。 Rakudo當時還沒有實施。 – raiph

回答

6

你不取消引用Perl 6中這樣的變量只需使用for $list

但是,你想做什麼proably不會做。 'a'..'f'不會在Perl 6中構建一個列表,而是一個名爲Range的內置數據類型。你可以用say $list.WHAT來檢查。爲了把它變成一個列表,每個元素迭代,你會使用for $list.list

3

這應該工作:

.say for @($list); 
.say for $list.list; 
.say for $list.flat; 

由於$list是標量,for $list只會遍歷一個單一的項目。

2

現在,Rakudo 2015.02正常工作。

您最好使用@作爲變量名稱的數字作爲數組。

Perl 6是上下文敏感的語言,所以如果你希望數組作爲'真正的數組',你最好給它一個合適的名字。

#!perl6 
use v6; 

my @list = 'a' .. 'f'; 

for @list -> $e { $e.say };