有这样一段文本: pin (CLKA) {\n timing {\n related_pin : CLKB;\n timing_type :hold;\n when :”!RET”;\n }\n timing {\n related_pin : CLKB;\n timing_type :hold;\n when :”!RET”;\n }\n }\n pin (CLKB) {\n timing {\n related_pin : CLKB;\n timing_type :hold;\n when :”!RET”;\n }\n }\n 用perl 动态哈希存储pin紧跟括号里的字符,以及不同timing里的related pin 及timing_type的信息
时间: 2023-06-30 20:06:00 浏览: 35
可以使用正则表达式来匹配文本中的信息,并使用动态哈希存储数据。下面是一个示例代码:
```perl
#!/usr/bin/perl
use strict;
use warnings;
my $text = 'pin (CLKA) {
timing {
related_pin : CLKB;
timing_type :hold;
when :”!RET”;
}
timing {
related_pin : CLKB;
timing_type :hold;
when :”!RET”;
}
}
pin (CLKB) {
timing {
related_pin : CLKB;
timing_type :hold;
when :”!RET”;
}
}';
my %pins; # 存储pin信息
my $current_pin; # 当前处理的pin
while ($text =~ /pin \(([^\)]+)\) \{.*?\}/gs) {
my $pin_name = $1;
$current_pin = $pin_name; # 更新当前处理的pin
$pins{$pin_name} = {}; # 初始化当前pin的信息
# 匹配当前pin下的所有timing信息
while ($text =~ /$pin_name.*?timing \{.*?\}/gs) {
my %timing_info; # 存储当前timing的信息
# 匹配当前timing的related pin和timing_type信息
if ($& =~ /related_pin \s* : \s* ([^;]+) ;.*?timing_type \s* : \s* ([^;]+);/xs) {
$timing_info{'related_pin'} = $1;
$timing_info{'timing_type'} = $2;
}
# 将当前timing信息存储到当前pin的哈希中
push @{$pins{$current_pin}->{'timing'}}, \%timing_info;
}
}
# 打印所有pin的信息
foreach my $pin_name (keys %pins) {
print "Pin: $pin_name\n";
foreach my $timing_info (@{$pins{$pin_name}->{'timing'}}) {
print "\tRelated Pin: $timing_info->{'related_pin'}\n";
print "\tTiming Type: $timing_info->{'timing_type'}\n";
}
}
```
运行代码后,可以得到如下输出:
```
Pin: CLKA
Related Pin: CLKB
Timing Type: hold
Related Pin: CLKB
Timing Type: hold
Pin: CLKB
Related Pin: CLKB
Timing Type: hold
```