我正在尝试使用Perl解析(基于C的)程序的输出。 每条输出线都是一个(1D)Perl数组,我有时要存储(根据某些条件)。
我现在希望在其第一个元素具有某个关键字的情况下(深度)复制一个数组, 如果另一个关键字在后面的行数组中匹配,则打印相同的复制数组。
到目前为止,我已经尝试以下操作:
#!/usr/bin/env perl
use strict; # recommended
use Storable qw(dclone);
...
while(1) # loop over the lines
{
# subsequent calls to tbse_line contain
# (references to) arrays of data
my $la = $population->tbse_line();
my @copy;
my $header = shift @$la;
# break out of the loop:
last if ($header eq 'fin');
if($header eq 'keyword')
{
@copy = @{ dclone \@$la };
}
if($header eq 'other_keyword')
{
print "second condition met, print first line:\n"
print "@copy\n";
}
}
但是,这会将空白行而不是复制数组的内容打印到屏幕上。我没有很多Perl经验,也无法弄清楚自己做错了什么。
关于如何解决这个问题的任何想法?
答案 0 :(得分:5)
my @copy
在当前作用域中分配一个名为@copy
的新Perl数组。看来您想在@copy
循环的一次迭代中设置while
并以另一次迭代打印。为了避免每次新的while
循环迭代开始时都删除数组,应将my @copy
声明移出循环。
my @copy;
while (1) { ... }