关于perl的文件读取

2019-04-14 08:38发布

关于perl的文件读取   Perl语言操作文件是很常使用的操作,本文将介绍读取文件的一点小技巧。 本文将介绍两种读取文件的方法:   l  使用perl的内置函数readline l  另外一种就是使用文件句柄直接操作""   1.       使用readline   readline EXPR readline   从文件句柄中读取数据,在标量环境中每一次从文件中读取一行记录,直到文件最后;在列表环境中,一次性将所有的文件记录全部读取。注意,我们可以使用“$/”来一次性的读取文件的所有记录。   当“$/”的值是undef时,readline返回文件中所有的行。   Readline实现了""操作符的功能,当然你也可以直接的使用"" 例如下面的程序:   $line = ;                 $line = readline(*STDIN);           # same thing   Readline遇到系统错误时,可以使用$!来返回错误,这在ttysocket错做的时候很有用。例如:                       for (;;) {                        undef $!;                        unless (defined( $line = <> )) {                            last if eof;                            die $! if $!;                        }                        # ...                 }   下面是例子: 代码 #!/usr/bin/perl   use strict; use warnings;   my $line; open FH, "< F://gan//1234.log";   #$/ = undef; while ( $line = readline FH ) {     unless ( defined $line ) {        next if eof;        die $! if $!;     }     $_ = $line;     s//s*$//g;   s/^/s*//g;     if ( $_ eq "" ) { next; }     print $_, "/n"; }   close(FH);   F://gan//1234.log文件中的内容: 我们主要关注它的文件格式   perl语言很强大     在文件操作中表现的非常优秀。               1zzzzzzzzz   2xxxxxxxxx   所以,我们要好好的把它学习好!   运行结果 perl语言很强大 在文件操作中表现的非常优秀。 1zzzzzzzzz 2xxxxxxxxx 所以,我们要好好的把它学习好!   代码分析,我们从运行的结果可以看出,文件的格式变化了。在分析代码,首先来看黄 {MOD}标记的代码 s//s*$//g; s/^/s*//g; 使用的是s///,它的作用就是去除一行前端和尾部的空格。再来看蓝 {MOD}标记的代码 if ( $_ eq "" ) { next; } 它的作用就是去除空行。最后再看粉红 {MOD}标记的代码 #$/ = undef; 在这里我们把它注销掉,如果去除注销程序运行的结果就是如下所示: perl语言很强大     在文件操作中表现的非常优秀。               1zzzzzzzzz   2xxxxxxxxx   所以,我们要好好的把它学习好! 原因就是当#$/ = undef;得时候readine就会运行在标量环境中,将文件中所有的行当做一行全部读出。