在Perl中更改数组

时间:2018-11-19 17:43:07

标签: arrays perl parsing

我正在尝试使用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经验,也无法弄清楚自己做错了什么。

关于如何解决这个问题的任何想法?

1 个答案:

答案 0 :(得分:5)

my @copy在当前作用域中分配一个名为@copy的新Perl数组。看来您想在@copy循环的一次迭代中设置while并以另一次迭代打印。为了避免每次新的while循环迭代开始时都删除数组,应将my @copy声明移出循环。

my @copy;
while (1) { ... }