在IC设计中,有很多EDA工具会产生各类的报告文件,需要人工去检查。
Perl 借用了C、sed、awk、shell脚本以及很多其他编程语言的特性。Perl 最重要的特性是Perl内部集成了正则表达式的功能。
在IC设计中,很多EDA工具使用具有前后关系,比如进行形式验证,比较Verilog代码和综合网表的一致性,就需要准备好网表.vg文件才能启动形式验证 *** 作。
在 perl 中, 本身独立 / / 两个斜杠里面的为正则表达式, regular expression, 又叫 regex. 作用就预设一个字串匹配的模式. 例如:
$re = qr/^\d$/ # 这正则的意思是, 由开始至结尾之间只有一个数字for ( 0..99 ) {
print "$_ match the pattern" if $_ =~ $re
} # 最後你会发现, 0-9 都是 match 的, 但就不见了10 到 99, 因为有两个数字
split 的意思就是按你後面正则所设的模式, 将後面第二个参数 ( 即 $_ ) 进行切割, 在这里是 / /, 所以, 如果你输入一个句子 "my name is mike", 那这个 for 循环里就会处理到 "my" , "name", "is", 和 "mike" 这四个字
s/// 的作用是 perl 中对字串作出寻找并取代的涵数,
第一个 / / 之间是要找的模式,
第二个 / / 之间的是, 如果找到能匹配前面那种模式时, 要取代成的文字,
最後那个 g 的位置叫 modifier(不知道中文叫甚麼), 可以当作对前面第一节正则的追加功能, 这些 modifiers 有很多有 m s i x p o d u a l 这麼多个, 另外还有 e 和 g 是为 s/// 而设的, 这些 modifiers 都是可以用在一起的, 例如 i 是不分大小写, g 是贪婪匹配, s/xxx/yyy/ig 就是不分大小写的贪婪匹配
g, 所谓的贪婪匹配就是会将字串搜到尾的意思, 如果没有贪婪匹配的话, perl 在搜到第一个匹配时就会停止, 例如
$x = "123456"$x =~ s/\d/_/
print $x # _23456
$x = "123456"
$x =~ s/\d/_/g
print $x # ______
这就是有 g 和没 g 的分别
最後回到你的问题上, 如果我输入的是 "my name is mike"
那麼, 最後得出的结果就会是 "yy naye is yike"
s/m/y/g 的意思就是, 将每个字从头到尾找出 m 字元, 再取代成 y 字元
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)