之前使用perl 脚本写了一个读取文件的小工具,但是由于当时使用的Tie 的方式,在处理大文件时,效率并不十分理想,所以在网上搜索了perl 如何操作文件指针的文章,自己也学习一下,本博客就是学习过程中留下的记录。
perl 打开文件的方式命令如下,"<"的含义为将test.txt文件的内容重定向到FILE 文件指针中
open FILE, "<", "/opt/test/test.txt";
perl 在操作文件指针时,可以用seek 函数移动文件指针
seek (filevar, distance, relative_to);
在文件中向前/后移动,有三个参数:
1、filevar,文件指针
2、distance,移动的字节数,正数向前移动,负数往回移动
3、reletive_to,值可为0、1或2。为0时,从文件头开始移动,为1时,相对于当前位置(将要读的下一行)移动,为2时,相对于文件末尾移动。
运行成功返回真(非零值),失败则返回零,常与tell函数合用。
测试脚本如下,作用为打开/opt/test/test.txt,并且将文件指针偏移 0 个字节,然后读取剩余的数据,读取方式为按行读取
#!/usr/bin/perl -w open FILE, "<", "/opt/test/test.txt"; my $position = tell(FILE); seek(FILE, $position, 0); while (<FILE>) { print ($_); } close (FILE);
perl 在操作文件指针时,还有一个按照字节读取的函数--getc(FILEHANDLE) ,该函数将返回一个字节的内容,并且文件指针也移动一个字节
如果用户想直接获得文件的字节数,可以先偏移到文件末尾,再查看当前偏移位置来查看
open FILE, "<", "/opt/test/test.txt"; seek(FILE, 0, 2); my $position = tell(FILE);
参考博文:
http://blog.mcshell.org/2013/05/25/perl_seek_tell_to_tail_-f.html
http://www.yiibai.com/perl/perl_tell.html