#!/usr/bin/perl
use strict;
use warnings;
my @array = qw[a b c];
foreach my($a,$b,$c) (@array) {
print "$a , $b , $c\n";
}
我收到以下错误:
缺少$ on循环变量
有什么问题?
我正在使用:perl v5.10.1 (*) built for x86_64-linux-thread-multi
答案 0 :(得分:13)
要在每次迭代中获取多个列表项,请使用类似List :: MoreUtils :: natatime的内容 或使用拼接:
my @tmparray = @array; # don't trash original array
while ( my ($a,$b,$c) = splice(@tmparray,0,3) ) {
print "$a , $b , $c\n";
}
或者将您的数据重组为多个数组,并使用Algorithm :: Loops :: MapCar *函数之一来一次循环多个数组。
答案 1 :(得分:8)
我不知道foreach在Perl中一次可以吃掉多个参数。我可能正在阅读documentation错误。
答案 2 :(得分:5)
正如其他答案中所提到的,Perl并不直接支持迭代for循环中的多个值。这是我在模块List::Gen中解决的问题之一:
use List::Gen;
my @array = qw/a b c d e f/;
for (every 3 => @array) {
print "@$_\n";
}
输出:
a b c
d e f
编辑:List::Gen
生成的列表切片别名为原始列表,这意味着您可以更改切片中的值以更改原始列表。对于这个问题,发布了其他几个解决方案,似乎无法实现这一功能。
答案 3 :(得分:2)
Block::NamedVar提供了nfor
DWIM。这比迭代的替代方法更方便。
use Block::NamedVar;
my @array = qw[a b c];
nfor my($a,$b,$c) (@array) {
print "$a , $b , $c\n";
}
答案 4 :(得分:1)
我认为你错过了foreach循环的重点。它遍历数组中的每个值。它一次处理一个值。这是正确的代码:
#!/usr/bin/perl
use strict;
use warnings;
my @array = qw[a b c];
foreach my $z (@array) {
print "$z\n";
}