#!/usr/bin/perl
use strict;
use warnings;
my @array = qw[a b c];
foreach my($a,$b,$c) (@array) {
print "$a , $b , $c\n";
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
缺少$ on循环变量
怎么了?
我在用: perl v5.10.1 (*) built for x86_64-linux-thread-multi
yst*_*sth 13
要在每次迭代中获取多个列表项,请使用类似List :: MoreUtils :: natatime或使用splice:
my @tmparray = @array; # don't trash original array
while ( my ($a,$b,$c) = splice(@tmparray,0,3) ) {
print "$a , $b , $c\n";
}
Run Code Online (Sandbox Code Playgroud)
或者将数据重新组织成多个数组,并使用Algorithm :: Loops :: MapCar*函数之一来一次循环多个数组.
正如其他答案中所提到的,Perl并不直接支持在for循环中迭代多个值.这是我在模块List :: Gen中解决的问题之一:
use List::Gen;
my @array = qw/a b c d e f/;
for (every 3 => @array) {
print "@$_\n";
}
Run Code Online (Sandbox Code Playgroud)
输出:
a b c
d e f
Run Code Online (Sandbox Code Playgroud)
编辑:List::Gen生成的列表切片别名为原始列表,这意味着您可以更改切片中的值以更改原始列表.对于这个问题,发布了其他几个解决方案似乎无法实现这一功能.