Изменение массива в Perl - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь использовать Perl для анализа выходных данных (на основе Си) программы.Каждая выходная строка представляет собой (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 голосов
/ 19 ноября 2018

my @copy выделяет новый массив Perl с именем @copy в текущей области.Похоже, вы хотите установить @copy во время одной итерации цикла while и распечатать его в другой итерации.Чтобы ваш массив не стирался каждый раз при запуске новой итерации цикла while, вы должны переместить объявление my @copy за пределы цикла.

my @copy;
while (1) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...