perl的open函数

翻译 2013年12月05日 12:06:07
在Perl中可以用open或者sysopen函数来打开文件进行操作,这两个函数都需要通过一个文件句柄(即文件指针)来对文件进行读写定位等操作。
下面以open函数为例:
1:读:open(文件句柄,"<文件名")/open(文件句柄,"文件名"),前提文件必须已经存在,否则会返回0,出错信息在$!中。
2:写:open(文件句柄,">文件名"),文件如果不存在,那么创建之,如果存在,内容被清空,长度截为0,$!中有出错信息。
3:追加:open(文件句柄,">>文件名"),基本同写,但有一点,文件中的内容不会被清空,新的内容会追加到原文后面。
4:读写:open(文件句柄,"+<文件名"),通过“+<”模式,你可以既可以读文件,又可以写文件。你可以通过tell()函数在文件内部移动,通过seek()函数进行定位。如果文件不存在,就会被创建。如果文件已经存在,原来的数据不会被清除。
    open(文件句柄,"+>文件名"),通过“+》”模式,可以同时读写文件,但与上面不同的是,它是破怀性写,会清除原来的内容。
例子:
my $conf = "D:/test.txt";

if(-e $conf)  #判断文件是否存在
{
    open(FILE,"<$conf") or die("No such file");
   
    while($LINE=<FILE>)        #读取文件
    {
       print$LINE;
      push(@del,$LINE);
    }

   close(FILE);

一.文件操作
        1.打开文件
        用open函数可将文件句柄与某文件联系起来,提供访问文件的接口,即打开文件.
        语法为:
                open(FILEVAR, "filepath");
        filepath可以有如下三种模式:
                "filepath"        以只读模式打开文件.
                ">filepath"       以写模式打开文件.
                ">>filepath"      以追加模式打开文件,写和追加的区别在于写模式将原文件覆盖,而追加模式则在文件末尾处添加内容.
                "+>filepath"      以读和写方式打开文件.
                "+>>filepath"     以读和追加方式打开文件.
        open的常见用法如下:
                if (open(MYFILE, "myfile"))
                {
                        # here's what to do if the file opened successfully
                }
        当文件打开失败时结束程序
                unless (open (MYFILE, "file1"))
                {
                        die ("cannot open input file file1\n");
                }
        亦可用逻辑或操作符表示如下:
                open (MYFILE, "file1") || die ("Could not open file");

        2.打开管道
        用open函数也可像命令行一样,打开和使用管道.
        语法为:
                open(MYVAR, "mode");
        mode有如下两种模式:
                "|command"        表示对MYVAR的输出相当于对command的输入.
                "command|"        表示command的输出作为对MYVAR的输入.
        例如:
                open(FILE1, "who|") or die("Could not open file.\n");
                while ($line = )
                {
                        print $line;
                }

        3.文件重定向
        许多UNIX shell可以把标准输出文件(STDOUT)和标准错误文件(STDERR)都重定向到同一个文件.
        例如在BASH中,命令`$ foo > file1 2>&1`把输出到标准输出和标准错误的内容存贮到文件file1中.
        用open函数可以实现文件重定向.
        如以上命令可以用如下命令实现:
                open (STDOUT, ">file1") || die ("open STDOUT failed");
                open (STDERR, ">&STDOUT") || die ("open STDERR failed");

        4.读取文件
        语句$line = ;从文件中读取一行数据存储到简单变量$line中并把文件指针向后移动一行.
        语句@array = ;把文件的全部内容读入数组@array,文件的每一行(含回车符)为@array的一个元素.
        注:为标准输入文件,通常为键盘输入,不需要打开.
        例如:
                open(FILE1, "testfile") or die("Could not open file.\n");
                @line = ;
                foreach $message (@line)
                {
                        print $message;
                }
        此外perl还提供以下几个系统读函数.
        函数read
        调用语法:
                read (filevar, result, length, skipval);
                read函数设计得与UNIX的fread函数等效,可以读取任意长度的字符存入一个简单变量.
                filevar表示文件变量
                result表示存贮结果的简单变量
                length表示读取的字节数
                skipval(可选项),指定读文件之前跳过的字节数.
                返回值为实际读取的字节数,如果已到了文件末尾,则返回零.如果出错,则返回空串.
        函数sysread
        调用语法:
                sysread (filevar, result, length, skipval);
                更快的读取数据,与UNIX函数read等效,参数与read相同.
        函数getc(读取单个字符)
        调用语法:
                $char = getc (infile);
                从文件中读取单个字符。
        函数binmode(读取二进制文件)
        调用语法:
                binmode (filevar);
                当你的系统(如类DOS系统)对文本文件和二进制文件有所区别时使用.必须在打开文件后,读取文件前使用.

        5.写入文件
        写入文件通常用print,printf和write这三个函数.
        print是这三个函数中最简单的,它向指定的文件输出,如果未指定,则输出到当前缺省文件中.
        如:
                print ("Hello, there!\n");
                print OUTFILE ("Hello, there!\n");
        第一句输出到当前缺省文件中,若未调用select,则为STDOUT.
        第二句输出到由文件变量OUTFILE指定的文件中.
        printf函数先格式化字符串再输出到指定文件或当前缺省文件中.
        如:
                printf OUTFILE ("you owe me %8.2f", $owing);
        此语句取出变量$owing的值并替换掉串中的%8.2f,%8.2f是域格式的例子,把$owing的值看作浮点数.
        printf的域格式表如下:
                %c      单个字符
                %d     十进制整数
                %e     科学计数法形式的浮点数 
                %f     普通形式(定点)浮点数
                %g     紧缩形式浮点数
                %o     八进制整数
                %s     字符串
                %u     无符号整数
                %x     十六进制整数
        域格式的注意事项:
                A.在格式d,o,u或x中,如果整数值较大或可能较大,可加个l字符,意为长整型,如%ld.
                B.%字符后加正整数表示该域的最小宽度,如果宽度不足,则向右对齐,前面用空格补足.如果该正整数以数字0打头,则补足字符为0.若%字符后为负整数,则结果向右对齐.
                C.浮点数域值(%c,%f和%g)中可以指定小数点前后的宽度,如%8.3f意为总宽度为8个字符,小数点后(即小数部分)为3个字符,多出的小数部分四舍五入.
                D.在整数,字符或字符串的值域中使用如上的小数形式n.m,n为总宽度,m为输出结果的最大宽度,这样就保证了输出结果前至少有n-m个空格.
        write函数使用输出格式把信息输出到文件中.
        此外perl还提供以下系统写函数.
        函数syswrite
        调用语法:
                syswrite (filevar, data, length, skipval);
                更快的写入数据,与UNIX函数write等效.
                filevar:将要写入的文件
                data:存贮要写入数据的变量
                length:要写入的字节数
                skipval写操作之前跳过的字节数
        最后注意:
                有些操作系统在对文件写入数据时,会先把数据拷贝到一片特殊的内存即缓冲区中,接下来的输出操作继续写入缓冲区直到写满.当缓冲区满了,就把全部数据实际写入.
                象这样先写入缓冲区再把整个缓冲区的内容输出比每次都实际输出所花费的时间要少得多,因为一般来说,I/O比内存操作慢得多.
                在perl中,如果要使当前缺省文件的输出不进行缓冲,可对$|赋一个非0值.
                        select (OUTFILE);
                        $| = 1;
                这样就关闭了对OUTFILE文件写入的缓冲.

        6.关闭文件
        close函数可用来关闭已打开的文件.
        当用close关闭管道,即重定向的命令时,程序等待重定向的命令结束.
        如:
                open (MYPIPE, "cat file*|");
                close (MYPIPE);
        当关闭此文件变量时,程序暂停运行,直到命令cat file*运行完毕.

        7.select函数
        select函数将通过参数传递的文件变量指定为新的当前缺省文件.
        如:
                select (MYFILE);
        这样,MYFILE就成了当前缺省文件,当对print,write和printf的调用未指定文件时,就输出到MYFILE中.


        8.eof函数
        eof函数查看最后一次读文件操作是否为文件最后一个记录.如果是,则返回非零值;如果文件还有内容,返回零.
        一般情况下,对eof的调用不加括号,因为eof和eof()是等效的.但与<>操作符一起使用时,eof和eof()就不同了.
       
        9.文件定位
        tell函数和seek函数配合使用,可轻松实现文件内部的定位.
        tell函数的调用格式如下:
                tell (filevar);
        用于返回从文件头到当前位置的距离。
        seek函数的调用格式如下:
                seek (filevar, distance, relative_to);
                distance表示移动的字节数,正数向前移动,负数往回移动.
                reletive_to的值可为0,1或2.为0时,从文件头开始移动;为1时,相对于当前位置移动;为2时,相对于文件末尾移动.
        命令运行成功返回真,失败则返回零.
        注意:
                A.seek和tell不能用于指向管道的文件变量。
                B.seek和tell中文件变量参数可使用表达式。


perl open函数打开管道

本文和大家重点讨论一下如何读写Perl文件,主要包括打开、关闭Perl文件,读写Perl文件,Perl文件的状态,命令行参数和打开管道六部分内容,希望通过本文的学习你对读写Perl文件有深刻的认识。 ...
  • stonesharp
  • stonesharp
  • 2011年09月02日 23:10
  • 12783

分享:Perl打开与读取文件的方法

在Perl中可以用open或者sysopen函数来打开文件进行操作,这两个函数都需要通过一个文件句柄(即文件指针)来对文件进行读写定位等操作。 Perl打开与读取文件的方法,供大家学习参考。 ...
  • vip_linux
  • vip_linux
  • 2013年10月23日 13:31
  • 1736

Perl的Open函数

犯了个汗颜的错误。。在使用perl里的open函数时,觉得如果用户没有权限打开文件,则会抛出异常。。无语。。学java学到傻了。perl事实上跟C有点相似,打开会返回非0,打不开会返回0而已。。。 ...
  • u013914485
  • u013914485
  • 2014年06月27日 07:50
  • 361

perl open操作总结(待续)

open操作 4个注意事项:(1)使用三参数的open;(2)使用my声明的局部变量代替裸文件句柄;(3)追加是">>"而不是">";(4)每个open都要判断执行结果(or die)。...
  • bruce_wang_janet
  • bruce_wang_janet
  • 2011年02月20日 23:48
  • 537

perl open

1:读:open(文件句柄,"文件名")/open(文件句柄,"文件名"),前提文件必须已经存在,否则会返回0,出错信息在$!中。 2:写:open(文件句柄,">文件名"),文件如果不存在,那么创...
  • crazywdy
  • crazywdy
  • 2014年07月01日 14:17
  • 817

Perl--函数引用

函数的引用: $ref=\&func; (func的定义在其他位置),不要(),当\&func()时为执行函数,返回值再引用。 当\&func()时为执行函数,返回值再引用。 [o...
  • zhaoyangjian724
  • zhaoyangjian724
  • 2014年12月16日 21:01
  • 869

perl open函数的使用

本文和大家重点讨论一下如何读写Perl文件,主要包括打开、关闭Perl文件,读写Perl文件,Perl文件的状态,命令行参数和打开管道六部分内容,希望通过本文的学习你对读写Perl文件有深刻的认识。 ...
  • blackmanren
  • blackmanren
  • 2017年10月13日 09:33
  • 265

perl函数中的传引用用法

perl中的是如何在函数中使用引用参数的。有时不想返回数组或者其他形式,希望直接修改函数的参数的实例的具体的值,作为返回,就C中的传递引用参数一样。 这样在perl中是怎么写的呢? 查了一下文档,pe...
  • mydriverc2
  • mydriverc2
  • 2013年11月20日 16:37
  • 1314

Perl中uc和lc函数

这两个函数的作用是把字符串的大写字母和小写字母进行转换。如: $side = uc $attrs[0]; 把attrs[0]转换成大写,然后给side变量赋值。 $gender = lc $att...
  • lv_xinmy
  • lv_xinmy
  • 2014年07月01日 14:11
  • 2699

perl 文件目录操作

perl 内置函数的操作 perl目录操作, 创建目录句柄指向要操作的目录。 打开目录句柄使用 opendir ; opendir dirhandle,directory ; 例:取某目录下文件的列表...
  • Shao_You
  • Shao_You
  • 2017年03月03日 18:13
  • 251
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:perl的open函数
举报原因:
原因补充:

(最多只允许输入30个字)