一个搞不定的替换问题及文件替换的相关问题

一个搞不定的替换问题及文件替换的相关问题

我要将一种语言写的程序转换成另一种程序语言的程序,比如A语言写的程序在文件A.txt中,根据两种语言之间的对应进行转换并将转换后的程序写入到B.txt中,现有如下待转换程序(在A.txt中):

module test(ina,inb)
port [K,M] ina[8],inb;
{

  integer inta=5,intb;
  real ra;
  float fa=4.3;

  initial {
      print("initial zone!\n";
  }

  body {
      
      print("body zone!\n";
         
  }

}


要转成:

module test(ina,inb);
port [K,M] ina[0:7],inb;


  integer inta,intb;
  real ra;
  float fa;

  
  body begin
     
      @initial begin
           inta=5;
           fa=4.3;
           print("initial zone!\n";
      end     
      print("body zone!\n";
         
  end

endmodule

问题1:
perl 有没有文件位置指针,因为在转换过程中需要好多在具体位置上的插入操作(如将initial 块出入到body块中),不仅仅是顺序的一行一行的对照转换。
有时候某个程序块的{}对可能需要消除掉(见上例),需要多行之间的查找匹配,这也不是那么方便。

怎么样才能随意取出文件的某行,修改后写到文件的想要位置上?
各位高手有什么修改思路吗?请赐教!多谢!

问题2:
port [K,M] ina[8],inb; 要修改成 port [K,M] ina[0:7],inb;
我写的是:
s/(\s*port\s+[.*]\s*\w+[)([0-9])(].*)/$1"02-1"$3/ge   

注意:因为我想把[8]变成[0:7],因此需要得到8,然后执行8-7(见上式中的$2-1),但是我在替换式中的表达不合语法,请教各位高手
应该怎么解决?多谢!
perl可不可以方便的实现读取文件中的一个匹配串,然后修改后在写会原来的位置,最好是perl能够记住该位置
另外,perl打开文件只有如下方式吗:
"<"  只读
">" 只写
"+<"   ">>"  追加


有没有那种可以是在原文件上直接修改的即读写,但不是追加到文件末尾。
perldoc -f tell
perldoc -f seek
perldoc perlopentut

不过说实话,我觉得你根本用不着这么低级的 IO 操作。
你是在用写 C 程序的思路来用 Perl。

直接修改用  use Tie::File;
不过,在你熟练使用,确保不会出错前,生成文件好了