Оператор триггера Perl - возможно ли рассматривать КОНЕЦ первого матча как СТАРТ следующего матча? - PullRequest
2 голосов
/ 04 января 2012

Нужна дополнительная помощь по оператору триггера Ниже приведены мои образцы данных:

LS             SPID     ASP            SPID
3-59           MGW05    
SLC ACL PARMG ST                   SDL                             SLI
 0  A1  17    C7STH-1&&-31         MSC19-0/RTLTB2-385
LS             SPID     ASP            SPID
3-618          ETRC18   
SLC ACL PARMG ST                   SDL                             SLI
 0  A2   0    C7ST2C-4             ETRC18-0/RTLTB2-417
 1  A2   0    C7ST2C-5             ETRC18-0/RTLTB2-449
END

Интересующие меня данные начинаются со строки «LS SPID ASP SPID» и заканчиваются либо следующим «LS SPID ASP SPID», либо END (если следующей строки LS нет). Можно ли получить это с помощью оператора триггера? Я прочитал эти данные в массив (@linesread), а затем попытался перебрать массив, используя приведенный ниже код, и он не работает. Это проблема, потому что я не могу зациклить одну и ту же строку дважды? Любое другое решение?

P.S .: Я использую оператор ... по мере необходимости.

foreach (@linesread) {
    if (/^LS\s*SPID\s*ASP\s*SPID$/ ... (/^LS\s*SPID\s*ASP\s*SPID$/ || /^END$/)) {
    print "$. \t $_\n";
    }
}   

1 Ответ

3 голосов
/ 04 января 2012

Сам оператор диапазона не может быть настроен для немедленной оценки левой стороны. Но вы можете попробовать

if (my $r = /^LS\s*SPID\s*ASP\s*SPID$/ ... (/^LS\s*SPID\s*ASP\s*SPID$/ || /^END$/)) {
    print "$. \t $_\n";
    redo if $r =~ /E0$/;
}
...