缺少$ on循环变量

nam*_*ame 4 arrays perl

#!/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*函数之一来一次循环多个数组.


iva*_*ans 8

我不知道foreach在Perl中一次可以吃掉多个参数.我可能正在阅读文档错误.


Eri*_*rom 5

正如其他答案中所提到的,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生成的列表切片别名为原始列表,这意味着您可以更改切片中的值以更改原始列表.对于这个问题,发布了其他几个解决方案似乎无法实现这一功能.