如何Perl正则匹配提取,并将结果给一个哈希?

wire[2:0] booth0 ;
wire[2:0] booth2 ;
wire[2:0] booth4 ;
wire[2:0] booth6 ;
wire[2:0] booth8 ;
wire[2:0] booth10 ;
wire[2:0] booth12 ;
wire[2:0] booth14 ;
reg[15:0] mulX_trans;

如上,假设内容在$report中,我需要将wire型和reg型变量名都提取出来,作为一个哈希的key,其对应值为其位宽。即形成一个哈希为:booth0 => 3 booth2 => 3 .......mulX_trans => 16

第1个回答  推荐于2016-04-19
booth0 => 3 booth2 => 3
是根据甚麼得逻辑得出来的 ?追问

wire[2:0] booth0 ;

说明变量booth0是wire型也就是线型的,位宽为2 1 0,也就是三位,想形成一个变量名字和位宽相对应的哈希。

其实我觉得上面这一些如果放在一个数组里是不是更好操作

追答use strict;

my %h;
while ( <DATA> ) {
    my @want = /\w+\[(\d+):(\d+)]\s+([\w\d_]+)/;
    die "$_ is not in right format" unless @want == 3;
    ++$h{$want[2]} for ( $want[1] .. $want[0] );    
}

print "$_ => $h{$_}$/" foreach sort keys %h;

__DATA__
wire[2:0] booth0 ;
wire[2:0] booth2 ;
wire[2:0] booth4 ;
wire[2:0] booth6 ;
wire[2:0] booth8 ;
wire[2:0] booth10 ;
wire[2:0] booth12 ;
wire[2:0] booth14 ;
reg[15:0] mulX_trans;


问: "其实我觉得上面这一些如果放在一个数组里是不是更好操作"

答: 不知道, 要视乎你想怎样操作, 和"上面这一些" 指的是甚麼

本回答被提问者采纳
相似回答