0

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

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]

直到数组结束。

有什么建议么?

4

2 回答 2

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 );
};

\运算符 in\@row表示列表的每个元素实际上@rows是对另一个列表的引用@row。这允许您似乎正在寻找的那种嵌套索引,如下所示:

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

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

于 2013-06-28T03:02:45.000 回答
0
while ($line=<FILEHANDLE>) {
    @letters=split(/\W+/,$line);
    system("/bin/kish -x /home/whatever/testscript $letters[0] $letters[1] $letters[2]");
}

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

于 2013-06-28T02:37:21.077 回答