在Perl中循环使用2D数组?

时间:2013-10-01 19:53:39

标签: arrays perl

如果我有一个2D数组,怎样才能访问循环内的整个子数组?现在我有

foreach my $row(@data){  
 foreach my $ind(@$row){  
  #perform operations on specific index  
 }  
}

但理想情况下我正在寻找符合

的内容
foreach my $row(@data){  
  #read row data like $row[0], which if it has the data I'm looking for  
  #I can go ahead and access $row[3] while in the same row..
}  

我对Perl相当新,所以可能只是不明白一些东西,但是当我试图以我想要的方式使用它时,我保持“全局符号”@row“需要显式包名”。

3 个答案:

答案 0 :(得分:6)

你很亲密。 $row数组引用,您可以使用deference运算符->[...]访问其元素:

foreach my $row (@data) {
    if ($row->[0] == 42) { ... }

$row[0]是指数组变量@row的一个元素,它与Global symbol ...完全不同(可能是未定义的 - 因此是$row错误消息)变量

答案 1 :(得分:3)

如果代码示例中的$row应该是子数组或数组引用,则必须使用间接表示法来访问其元素,例如$row->[0],{{1等等。

错误的原因是因为$row->[1]实际上意味着存在数组$row[0],这可能不在您的脚本中。

答案 2 :(得分:1)

你也可以试试这个......

my @ary = ( [12,13,14,15],
        [57,58,59,60,61,101],
        [67,68,69],
        [77,78,79,80,81,301,302,303]);

for (my $f = 0 ; $f < @ary ; $f++) {
    for (my $s = 0 ; $s < @{$ary[$f]} ; $s++ ) {
        print "$f , $s , $ary[$f][$s]\n";
    }
    print "\n";
}