#!perl6
use v6;
my $longest = 3;
my @list = <a b c d e f>;
for @list -> $element is rw {
$element = sprintf "%*.*s", $longest, $longest, $element;
$element.say;
}
这行得通。但是在第二个和第三个中,我收到一条错误消息。我怎样才能让它们发挥作用?
#!perl6
use v6;
my $longest = 3;
my @list = <a b c d e f>;
for @list <-> $element {
$element = sprintf "%*.*s", $longest, $longest, $element;
$element.say;
}
# ===SORRY!===
# Missing block at line 11, near ""
.
#!perl6
use v6;
my $longest = 3;
my $list = <a b c d e f>;
for $list.list -> $element is rw {
$element = sprintf "%*.*s", $longest, $longest, $element;
$element.say;
}
# Cannot modify readonly value
# in '&infix:<=>' at line 1
# in <anon> at line 8:./perl5.pl
# in main program body at line 1
最佳答案
关于你的第二个例子
<->
可能无法在您使用的 Rakudo Perl 中工作,但它已在更新的版本中得到修复。 (它与深度解析问题有关,需要比我们当时更好的最长 token 匹配算法。)
关于你的第三个例子
声明
my $list = <a b c d e f>;
创建$list
作为Seq
数据类型,和 Seq
元素被认为是不可变的。你真正想要的是 $list
成为Array
,如:
my $list = [<a b c d e f>];
有了它,最后一个示例按预期工作:
pmichaud@orange:~/rakudo$ cat x.p6
#!perl6
use v6;
my $longest = 3;
my $list = [<a b c d e f>];
for $list.list -> $element is rw {
$element = sprintf "%*.*s", $longest, $longest, $element;
$element.say;
}
pmichaud@orange:~/rakudo$ ./perl6 x.p6
a
b
c
d
e
f
pmichaud@orange:~/rakudo$
希望这对您有所帮助!
下午
关于for-loop - perl6/落语 : Problem with writing on the loop-variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5042463/