清新的Perl(十)——操作文本文档
对于Perl语言来说,我们最常用的便是利用正则表达式处理文档,包括分析设备日志、存储文档记录。而这些工作离不开Perl文件句柄的支持。因此本节,我会首先讲下Perl的文件句柄操作,也就是open函数。
open函数,在Perl语言中算是相当难理解的了,因为open函数中有符号。而且,因为Perl语言的写法很随意,所以在不同的教材中,有不同的写法,这更加让初学者感到糊涂了。我推荐open函数这样写:
open 句柄,读或写,文件路径及名称 or die "can not open the file: $!\n";
这种写法是最清晰的一种,无论是你将来维护代码,上传到GitHub分享给他人,都是最容易理解的。
句柄:实际上句柄是可以随便写的,但是作为初学者应该自律,我建议直接用“FILE”大写的英文单词表示。无论何时何地,当你要打开文件句柄时,记得把句柄命名为FILE。
读或写:由于Perl在符号使用方面过于泛滥了,书本教材中会介绍open模式中的很多符号。我建议只记住最常用的两种即可,<,>。这两个可以看作是简写的箭头,当箭头指向句柄,表示从文件中读取数据,当箭头指向文件,表示向文件中写入数据。
文件路径及名称:这个不用多说。
or die …:只要记住这是抛出异常的固定写法即可。
下面介绍一下读写操作:
#读操作
open FILE,'<','my.txt' or die "can't open the file:$!\n";
while(my $line=<FILE>){
print $line;
}
close FILE;
这里讲解的是最常用的写法。首先,无论是读还是写,一定要记住在对句柄的操作完成后调用close FILE关闭句柄。虽然Perl会自动垃圾回收,但是养成关闭FILE句柄的好习惯,会保证你不用再运行程序时频繁的找bug。
对于读数据来说,最基本方法便是读取每行数据,再使用正则表达式解析。所有的工作都包括在一个while循环中,$line=<FILE>是固定写法,<>表示的是从文件句柄中读取一行,有很多源代码中会省略掉<>中的FILE句柄。这不是一种好习惯,因这种写法,我也用过,虽然不会报错,但是经常会读取到一些错误的数据。为了减少不必要的麻烦,请使用<FILE>这种写法,切勿省略句柄。
然后是写操作
open FILE,'>','my.txt' or die "can't open the file:$!\n";
print FILE "Hello World";
close FILE;
写操作更加的简单,调用print即可,记住句柄和字符串之间是空格,不是逗号。实际上,当我们使用print “Hello World”在屏幕上显示时,print和字符串正中间的标准输出句柄被省略了。