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

wire[2:0]booth0;wire[2:0]booth2;wire[2:0]booth4;wire[2:0]booth6;wire[2:0]booth8;wire[... 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
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
百度网友c9e795dda
推荐于2016-04-19 · TA获得超过5167个赞
知道大有可为答主
回答量:1128
采纳率:0%
帮助的人:1156万
展开全部
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;


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

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

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式