perl求助
时间:10-02
整理:3721RD
点击:
写了一个perl脚本,用来删physical netlist中不要的filler的,主要有个匹配出问题了,如下open FILE,<FILE.txt;
select FILE;
$file=join '',<FILE>;
$file=~<.*?$fill.*?\n><>gm;#$fill是要删的FILLXX
open FILE,>FILE.txt;
print $file;
这个运行的都没问题,我删的是带FILLXX名字的那一行,但是最后发现网表里面多删了一行,很奇怪,多删的那一行附近代码为
//fill xxxx.
FILLXX ...;
FILLXX ...;
第一行是个注释,然后最后带了一个“.”点,然后脚本运行完,吧这一行注释也给删了,如果网表里面没这个点,脚本运行完,注释又不删,很是奇怪。
select FILE;
$file=join '',<FILE>;
$file=~<.*?$fill.*?\n><>gm;#$fill是要删的FILLXX
open FILE,>FILE.txt;
print $file;
这个运行的都没问题,我删的是带FILLXX名字的那一行,但是最后发现网表里面多删了一行,很奇怪,多删的那一行附近代码为
//fill xxxx.
FILLXX ...;
FILLXX ...;
第一行是个注释,然后最后带了一个“.”点,然后脚本运行完,吧这一行注释也给删了,如果网表里面没这个点,脚本运行完,注释又不删,很是奇怪。
大概是因为你的xxxx匹配到$fill,然后如果后面碰巧没有字符就不匹配而已,所以这样是不可靠的
那不可能说我去了“.”这个句号就又不能匹配了啊?这个最奇怪
最好用while循环做,比较清晰
while (<>) {
if(/filler/i) {
next ;
}
print ;
}
再加个while就while嵌套一个while,我怕循环太多次,影响速度
不可能的,perl比你想象的要快,除非你感觉真的太慢了, 需要写法改进
标题
是很奇怪,你这个匹配是只要有$fill就匹配上,但是你放上来的script都有好几个错,难保你真正写的没问题
按你的写法应该改成这样:
$file=~s<^\s*?$fill.*?\n><>gm
至于原因,找不到就算了,要不你原封不动地把script和netlist那几行放上来。