應(yīng)用背景
在用perl語言生成文件時(shí),有時(shí)會碰到需要對文件的最后一行進(jìn)行特殊處理,這個(gè)時(shí)候可以利用perl語言中的seek()函數(shù)和tell()函數(shù)配合來完成。
實(shí)例應(yīng)用
問題描述
下面是用verilog語言描述的信號連線信息,其中1-4行都是以逗號結(jié)尾,只有最后一行是以右括號+分號結(jié)尾。如何用perl腳本自動(dòng)實(shí)現(xiàn)該效果呢?
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));
解決方案
- 首先使用perl語言的print函數(shù)生成格式統(tǒng)一的代碼,
print($FH,"\.i_$1\(c_$1),\n");
其中,$1是用perl正則表達(dá)式捕獲的信號名,對應(yīng)圖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.此時(shí)文件句柄$FH位置指向第5行的逗號后面的換行符\n的下一個(gè)字符,可以用tell函數(shù)獲取此位置:
$pos=tell($FH);
- 將文件句柄的位置重新指向第5行的逗號,然后重新輸出右括號、分號、換行符(\n):
$new_pos=$pos - 2;# 文件句柄左移兩個(gè)字節(jié)
seek($FH,$new_pos,0);
print($FH,"\);\n");
經(jīng)過上面三個(gè)步驟,就可以實(shí)現(xiàn)用腳本自動(dòng)對最后一行進(jìn)行處理的功能^_^