2

在触发器运算符上需要更多帮助以下是我的示例数据:

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),然后尝试使用以下代码循环遍历数组,但它不起作用。问题是因为我不能在同一条线上循环两次吗?还有其他解决方案吗?

PS:我根据需要使用 ... 运算符。

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

1 回答 1

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$/;
}
于 2012-01-04T13:44:39.703 回答