以下是我正在处理的数据:
__DATA__
Node 1:
98 debug : fill 100
102 debug : fill 104
Node 2:
88 debug : fill 120
152 debug : fill 164
Run Code Online (Sandbox Code Playgroud)
我想写一个正则表达式/(或任何合适的)从节点1下面的数据中捕获信息,比如'98:100',但只有在识别出节点1并将其存储在一个数组中后才说@ value1(即@ value1中的值)对应于节点1)下面的数据.并且类似地从节点2下面的数据捕获和存储信息,比如152:164,在已经在不同的阵列中识别节点2之后说'@ value2'.我用来捕获信息的正则表达式是" qr/\s+([0-9]{2,3})\s[a-z]+\s(:)\s[a-z]\s([0-9]{3})/".但是,如果我使用'if'语句
while (<>){
if ($_=~ /Node 1/){
#capture information using regex
}
}
Run Code Online (Sandbox Code Playgroud)
在正则表达式之前,脚本不会返回任何值,可能是因为它在单词"Node"之后的同一行中搜索或正则表达式.
有关如何在识别特定节点后跳转到下一行并使用正则表达式捕获信息的任何建议.
你的问题有点令人困惑.您似乎想要使用符号引用,但最好使用哈希.另请参见"为什么这是愚蠢的,以使用一个变量作为一个变量名"部分1,2和3.
#!/usr/bin/perl
use strict;
use warnings;
my %data;
my $current_node;
while ( <DATA> ) {
/^Node ([0-9]+):/ and $current_node = $1 and next;
if ( /^\s+ ([0-9]+) \s debug \s : \s fill \s ([0-9]+)/x ) {
push @{ $data{"value$current_node"} }, "$1 : $2";
}
}
use Data::Dumper;
print Dumper \%data;
__DATA__
Node 1:
98 debug : fill 100
102 debug : fill 104
Node 2:
88 debug : fill 120
152 debug : fill 164
Run Code Online (Sandbox Code Playgroud)