我有一个看起来像这样的文件:
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]
直到阵列结束。
有什么建议吗?
答案 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;显示循环结束的位置。