perl脚本添加了额外的花括号

时间:2019-05-05 11:29:05

标签: linux perl

下面是我正在使用的脚本,它执行得很好,除了它在文件末尾添加了三个额外的花括号。

abc.jso包含许多行,其中只有几行只有开/关大括号(以防万一,此信息有帮助)

我尝试用print $a " $var";代替print $a "$var";。简而言之,我在此print前面添加了空格,并且它起作用了。

open (my $a,'+<',"abc.jso") or die $!;
my @lines=<$a>;
seek $a,0,0;
    while (@lines) {
        my $var = shift @lines;
        if ($var=~ /^\s*\"(netlist|filelist)\" : \".*$blk.*\",/) {
            print $a "            \"netlist\" : \"/t98/pnr/work/$blk"."_rk/run/dc/$blk"."_post_dft.v\",\n";
            $count++;
            print "Netlist got replaced\n";
        }
        elsif ($var=~ /^\s*\"spf\" : \".*$blk.*\"/) {
            print $a "            \"spf\" : \"/t98/scan/atpg/t98_1.0/spf/$blk".".scan_compress.spf\"\n";
            $count++;
            print "SPF got replaced\n";
        }
        else {
            print $a "$var";
        }
    }
close($a);

有人可以解释为什么会这样吗?是否有我不知道的文本处理这种极端情况?

1 个答案:

答案 0 :(得分:2)

具有一些示例输入和输出会有所帮助,但让我猜测一下。尝试通过搜索将文件截断:

truncate $a,0; seek $a,0,0;

没有截断,您将覆盖之前的内容。如果您编写的信息多于阅读的信息,则此方法有效,但如果编写的信息少于阅读的信息,则效果不好。