如何在Perl中访问多维数组

时间:2013-06-28 02:30:04

标签: perl multidimensional-array

我有一个看起来像这样的文件:

A:B:C
G:P:T
K:M:Q
...

我已将文件加载到数组@letters中。

我需要检索没有:的每个字母,并将其作为参数传递给我调用的另一个脚本。

所以

/bin/kish -x /home/whatever/testscript $letter[0 1] $letter[0 2] $letter[0 3]

然后

/bin/kish -x /home/whatever/testscript $letter[1 1] $letter[1 2] $letter[1 3]

直到阵列结束。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

首先我们需要构建一个多维数组,我知道在Perl中执行此操作的最佳方法是使用引用:

use strict;
use warnings;

open( my $fh, "<", "data" );
my @rows;
while ( my $line = <$fh> ) {
    chomp $line;
    my @row = split(':', $line) ;
    push( @rows, \@row );
};

\中的\@row运算符意味着列表@rows的每个元素实际上是对另一个列表@row的引用。这允许您似乎寻求的嵌套索引,如下所示:

`/bin/kish -x /home/whatever/testscript $rows[0]->[0] $rows[0]->[1] $rows[0]->[2]`

首先我们像往常一样索引列表(这是“行”号)。箭头操作符->取消引用列表的引用,然后我们使用适当的“列”编号索引到该解除引用的列表

答案 1 :(得分:0)

while ($line=<FILEHANDLE>) {
    @letters=split(/\W+/,$line);
    system("/bin/kish -x /home/whatever/testscript $letters[0] $letters[1] $letters[2]");
}

您需要先打开FILEHANDLE。 while()循环(第一个)读取文件,一次一行。第二个占用该行,将其分成块(非字母数字字符[例如&#34;:&#34;]用于定义块之间的中断)。系统行运行命令本身。最后一行&#34;}&#34;显示循环结束的位置。