2012-01-04 2 views
2

Нужна помощь на оператора флип-флоп Ниже мой пример данных:Perl Flip-flop operator - Можно ли считать END первого матча START следующего матча?

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 ИСП ASP SPID» и заканчивается либо следующая «LS SPID ASP ИСП 'или 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"; 
    } 
} 

ответ

3

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

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$/; 
} 
+0

Большое спасибо за быстрый ответ. Я прочитал об этой специальной последовательности E0, добавляемой к возвращаемому значению, но не смог визуализировать об использовании этого для решения моей проблемы. Благодаря! – pkr13

 Смежные вопросы

  • Нет связанных вопросов^_^