perl文件操作

来源:互联网 发布:淘宝卖家客服app 编辑:程序博客网 时间:2024/06/05 09:55

一、打开文件:

$OpenFileFlag  =  open(FILEHANDLE,"模式标识符 FileName");

如果打开成功,则返回真值(非空值);如果打开失败,则返回假值(空值);文件的默认访问模式是只读;

1、使用open函数进行文件重定向:

$OpenFlag  =  open(HFCAT,"cat file* |");

则open函数先把cat命令的输出构造成一个文件,然后与文件句柄变量HFCAT关联起来;

$OpenFlag1  =  open(FH1,"> FileName");

$OpenFlag2  =  open(FH2,">&  FH1");

这两行语句的功能是把文件句柄FH1和HF2都关联到文件FileName上,两个文件句柄都向同一个文件中写入数据;

其中第二条语句中的参数">& FH1"告诉Perl解释器使用已经打开的并与文件句柄FH1关联的文件,即:文件句柄FH1和FH2都指向与FH1相关联的文件;

二、关闭文件:

关闭文件使用函数close();如果关闭的文件是管道文件,即重定向的命令时,程序会等待重定向命令执行结束;

close(FILEHANDLE);

三、print、printf和write函数:

这三个函数都是输出函数;其中print是最简单的函数;

1、print   ("Hello,Perl World/n"); 

     输出到当前默认的文件中(由select()函数选择),没有调用select()时,默认的输出文件是标准输出STDOUT;

2、print   OUTFILE  ("Hello,Perl World/n") ;

     把数据输出到指定文件句柄OUTFILE所指向的文件中;

3、printf  ($FORMATSTRING,arg1,arg2,...,argN);

     先格式化数据,然后把格式化后的数据写到默认文件中(由select()函数选择),没有调用select()时,默认的输出

     文件是标准输出STDOUT;

4、printf  OUTFILE  ($FORMATSTRING,arg1,arg2,...,argN);

     先格式化数据,然后把数据输出到指定文件句柄OUTFILE所指向的文件中;

5、write  ($FORMATSTRING,arg1,arg2,...,argN);

     先格式化数据,然后把格式化后的数据写到默认文件中(由select()函数选择),没有调用select()时,默认的输出

     文件是标准输出STDOUT;

6、write  OUTFILE  ($FORMATSTRING,arg1,arg2,...,argN);

     先格式化数据,然后把数据输出到指定文件句柄OUTFILE所指向的文件中;

7、select()函数:

      select(FILEHANDLE);

      这个函数把参数FILEHANDLE所指定的文件句柄设置为当前新的默认文件;当对print、printf和write函数的调用

      未指定文件时,默认就写入到文件句柄FILEHANDLE所指向的文件中;

8、eof()函数:

      eof函数判断最后一次读文件操作是否是文件的最后一个记录(检查文件读写位置指针是否已经到达文件尾部),

      如果是,则返回非零值(真),如果不是,否则返回零值(假);也就是说,最后一次读取文件时,如果文件读写位

      置指针已经到达文件尾部,则eof函数返回非零值(真),如果没有到达文件尾部,则返回零值(假);
      一般情况下,带圆括号的eof()函数调用与不带圆括号的eof函数调用的效果是一样的;但是如果与文件输入运算

      符<>一起使用的话,效果就不一样了;当在命令行输入多个文件的时候,不带圆括号的eof函数调用在读完每一

      个文件的时候,都会认为读到这个文件尾部了,此时返回非零值(真),否则返回零值(假);而带圆括号的eof()函

      数调用则会认为只有当所有的文件都读取完了,才会认为是读取文件结束,也就是说只有当文件读写位置指针

      到达最后一个文件的尾部时,才会认为读取文件结束,此时eof()函数返回非零值(真),否则返回零值(假);只有

      所有文件都读过了,eof()函数才会返回真值,如果只是多个文件中的前面几个文件的结尾,则eof()函数仍然返

      回假值,因为还有需要读取的输入;

四、系统读写函数:

1、read()函数:

     Perl把该函数设计得与UNUX系统中的fread()函数等效,用于从指定文件中读取任意长度的字符(字节)数,并把读

     到的数据存储到一个简单变量或数组元素中;调用语法如下:

     $BytesToRead  =  read(FileVariable,Buffer,Length,BytesTpSkip);

     FileVariable:用于存储文件句柄的简单变量;

     Buffer:用于存储read读到的数据的简单变量(或数组元素);

     Length:最多需要读取的字节数;

     BytesToSkip:可选项,用于指定读取文件之前需要跳过的字节数;

     返回值:返回值为实际读取到的字节数;如果文件读写位置指针已经到达文件的尾部,则read()返回零;如果出

      错,则read()返回空值;

2、sysread()函数:

     该函数用于更快地读取数据,其实现与UNIX系统中的read()函数等效,与Perl中的read()函数相同;调用语法:

     $BytesToRead  =  sysread(FileVariable,Buffer,Length,BytesToSkip);

     FileVariable:用于存储文件句柄的简单变量;

     Buffer:用于存储读取到的数据的简单变量(或数组元素);

     Length:最多需要读取的字节数;

     BytesToSkip:可选项,用于指定在读取文件之前需要跳过的字节数;

     返回值:返回值为实际读取到的字节数;如果文件读写位置指针已经到达文件尾部,则sysread()返回零;如果

     出错,则sysread()返回空值;

3、syswrite()函数:

      该函数用于更快地写入数据,其实现与UNIX中的write()函数等效;有4个参数:

      $BytesToWrite  =  syswrite(FileVariable,DataBuffer,Length,BytesToSkip);

      FileVariable:用于存储文件句柄的简单变量;

      DataBuffer:用于存放将要写入的数据的缓冲区;

      Length:需要写入的字节数;

      BytesToSkip:在写文件之前需要跳过的字节数;

      返回值:返回实际写入的字节数;如果出错,则syswrite()返回空值;

4、getc()函数:

      该函数用于从指定文件中读取一个字符(字节);其实现与UNIX C语言中的getc()函数等效;调用语法:

      $Char  =  getc(FileVariable);

      FileVariable:用于存放文件句柄的简单变量;

      返回值:返回读取到的字符;

5、binmode()函数:

      该函数用于读取二进制文件;当所在的系统对文本文件和二进制文件有所区别时使用;必须在打开文件之后、

      读取文件之前调用;调用语法:

      binmode(FileVariable) ;

      FileVariable:用于存放文件句柄的简单变量;