perl文件句柄的理解(tell、seek)以及文本多行匹配的一种算法

2017-05-05 07:54:54来源:CSDN作者:u011729865人点击

  • perl文件句柄的理解
  • 文本多行匹配的一种算法
  • seek - reposition file pointer for random-access IO
  • tell - get current seekpointer on a filehandle
  • seek和tell一般是配套使用
  • 参考文档

下述理解,完全是个人体会。自觉有点道理。

perl文件句柄的理解

句柄,又叫指针。
文件句柄,就是指向文件内容的内存空间范围的头地址;文件句柄读取一次,起始地址+1,即读取下一行(perl里默认是一行一行读取文本的。可以设置间隔符$/,使之不是/n)。这一段,是个人体会,不知正确否。

如下面举例,连续两次读取文件句柄$fileh,发现第二次读取文件句柄【特指while(<$fileh>)】,地址已经递增操作了,而不是从第一行读取test.txt的内容。

qilei@AFAAW-704030720:~$ cat test.txta11111a22222a33333a44444a55555a66666a77777a88888a99999a00000b11111b22222b33333b44444b55555b66666b77777b88888b99999b00000qilei@AFAAW-704030720:~$ cat b.pl#!/usr/bin/perluse strict;use warnings;open my $fileh,"<", $ARGV[0] or die "error:file can't open";while(<$fileh>){        if($_ =~ /a33333/) {                print $_;                while(<$fileh>){                        print $_;                #       if($_ =~ /7777/) {                #               print $_;                #               last;                #       }                }        }}qilei@AFAAW-704030720:~$ ./b.pl test.txta33333a44444a55555a66666a77777a88888a99999a00000b11111b22222b33333b44444b55555b66666b77777b88888b99999b00000

文本多行匹配的一种算法

如果在第二次while(<$fileh>)的时候增加判断条件,就可以依据第一次匹配关键词“a33333”这个前提条件,做第二次匹配。
这种算法,可以看做是基于嵌套循环。ps:根据实际需求,可以灵活使用last和next。

qilei@AFAAW-704030720:~$ cat b.pl#!/usr/bin/perluse strict;use warnings;open my $fileh,"<", $ARGV[0] or die "error:file can't open";while(<$fileh>){        if($_ =~ /a33333/) {                print $_;                while(<$fileh>){                        if($_ =~ /7777/) {                                print $_;                                last;                        }                }        }}qilei@AFAAW-704030720:~$ ./b.pl test.txta33333a77777qilei@AFAAW-704030720:~$

seek - reposition file pointer for random-access I/O

定位指针,即记录文件句柄的地址。
可以记录文件句柄的头地址、中间地址、末地址。

seek - perldoc.perl.org
http://perldoc.perl.org/functions/seek.html

tell - get current seekpointer on a filehandle

获取之前定位的指针。

seek - perldoc.perl.org
http://perldoc.perl.org/functions/seek.html

seek和tell一般是配套使用。

参考文档

Perl特殊变量
http://www.yiibai.com/perl/perl_special_variables.html
Perl参考函数
http://www.yiibai.com/perl/perl_function_references.html

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台