来看个联发科秋招的一个大题(2)——必考的Perl语言正则匹配和文件读写

2021-04-15 13:21:27 浏览数 (1)

在数字IC中,很多都要求熟悉 Python 或者 Perl 脚本,联发科和其他很多企业在招聘中也经常有这样的题目。

用 python 或者 perl 写程序,在 xxx.log 中找到 fail 单词

文章首发在【FPGA探索者】公众号。

1. 读取文件

读取“xxx.log”文件,如果打不开,就直接结束 die

文件操作时 < 表示读取,> 表示写入,>> 表示追加

如果读取成功,则返回一个不为 0 的数,作为判断依据。

2. 正则匹配

逐行读取文件,并进行正则匹配

无注释版:

有注释版:

(1)使用 while(<文件句柄>) 对文件进行逐行读取

(2)每一行的值会自动保存在一个 $_ 的特殊变量中

(3)获取该行的值,并进行正则匹配

(4)如果匹配成功,匹配的字符串自动保存在 $& 变量中,打印

3. 关闭文件

关闭文件,直接 close 文件句柄;

4. 结果

安装 ActivePerl,并在命令行 cmd 中进入当前文件目录,文件名命名是 test1.pl,在命令行中输入 perl test1.pl,回车。

左侧是 xxx.log 中的数据,右侧是结果。

首先打印一个 open 表示读取文件成功;

然后读取并打印每一行的字符串,当匹配成功时,打印 match:匹配到的字符串。

5.结果对比

这里使用 E课网的程序测试。

很遗憾,报错:

这个可能是我的环境变量设置的原因,将

代码语言:javascript复制
my %input_file = "xxx.log";

改成:

代码语言:javascript复制
my $input_file = "xxx.log";

可以运行:

这里没有支持中文,所以出现了乱码,但是在第 3 和 第 4 行都打印了 fail 字符串,这是什么原因呢?

代码语言:javascript复制
    print "匹配的字符:$&n";

问题出现在 "

【注释版代码】,可在【FPGA探索者】公众号回复【perl】获取。

相关总结:

代码语言:javascript复制
$_              默认输入,在文件逐行读取时,就是每次读取的内容
$& 或 $MATCH    上一次成功匹配的字符
=~              匹配
!~              不匹配
m/str/ 或/str/  正则表达式,看是否含有字符串 str
<, >, >>        代表读取、写入、追加

0 人点赞