Perl应用1:文件最后一行的特殊处理

应用背景

在用perl语言生成文件时,有时会碰到需要对文件的最后一行进行特殊处理,这个时候可以利用perl语言中的seek()函数和tell()函数配合来完成。

实例应用

问题描述

下面是用verilog语言描述的信号连线信息,其中1-4行都是以逗号结尾,只有最后一行是以右括号+分号结尾。如何用perl脚本自动实现该效果呢?

  1 .i_signalA(c_signalA),
  2 .i_signalB(c_signalB),
  3 .i_signalC(c_signalC),
  4 .i_signalD(c_signalD),
  5 .i_signalE(c_signalE));
解决方案
  1. 首先使用perl语言的print函数生成格式统一的代码,
print($FH,"\.i_$1\(c_$1),\n");

其中,$1是用perl正则表达式捕获的信号名,对应图1中的signalA,signalB,...
打印的信息如下图所示:

  1 .i_signalA(c_signalA),
  2 .i_signalB(c_signalB),
  3 .i_signalC(c_signalC),
  4 .i_signalD(c_signalD),
  5 .i_signalE(c_signalE),

2.此时文件句柄$FH位置指向第5行的逗号后面的换行符\n下一个字符,可以用tell函数获取此位置:

$pos=tell($FH);
  1. 将文件句柄的位置重新指向第5行的逗号,然后重新输出右括号分号换行符(\n)
$new_pos=$pos - 2;#    文件句柄左移两个字节
seek($FH,$new_pos,0);
print($FH,"\);\n");

经过上面三个步骤,就可以实现用脚本自动对最后一行进行处理的功能^_^

你可能感兴趣的:(Perl应用1:文件最后一行的特殊处理)