当前位置:K88软件开发文章中心编程语言PerlPerl01 → 文章内容

Perl 文件操作

减小字体 增大字体 作者:佚名  来源:网上搜集  发布时间:2019-1-11 13:10:50

Perl 文件操作Perl 使用一种叫做文件句柄类型的变量来操作文件。从文件读取或者写入数据需要使用文件句柄。文件句柄(file handle)是一个I/O连接的名称。Perl提供了三种文件句柄:





STDIN,STDOUT,STDERR,分别代表标准输入、标准输出和标准出错输出。Perl 中打开文件可以使用以下方式:open FILEHANDLE, EXPRopen FILEHANDLEsysopen FILEHANDLE, FILENAME, MODE, PERMSsysopen FILEHANDLE, FILENAME, MODE参数说明:





FILEHANDLE:文件句柄,用于存放一个文件唯一标识符。EXPR:文件名及文件访问类型组成的表达式。MODE:文件访问类型。PERMS:访问权限位(permission bits)。Open 函数以下代码我们使用 open 函数以只读的方式(<)打开文件 file.txt:open(DATA, "<file.txt");<表示只读方式。代码中的 DATA 为文件句柄用于读取文件,以下实例将打开文件并将文件内容输出:实例





#!/usr/bin/perlopen(DATA, "<file.txt") or die "file.txt 文件无法打开, $!";while(<DATA>){print "$_";}以下代码以写入( > )的方式打开文件 file.txt:





open(DATA, ">file.txt") or die "file.txt 文件无法打开, $!";>表示写入方式。如果你需要以读写方式打开文件,可以在 > 或 < 字符前添加 + 号:open(DATA, "+<file.txt"); or die "file.txt 文件无法打开, $!";这种方式不会删除文件原来的内容,如果要删除,格式如下所示:open DATA, "+>file.txt" or die "file.txt 文件无法打开, $!";如果要向文件中追加数据,则在追加数据之前,只需要以追加方式打开文件即可:open(DATA,">>file.txt") || die "file.txt 文件无法打开, $!";>> 表示向现有文件的尾部追加数据,如果需要读取要追加的文件内容可以添加 + 号:open(DATA,"+>>file.txt") || die "file.txt 文件无法打开, $!";下表列出了不同的访问模式:模式描述< 或 r只读方式打开,将文件指针指向文件头。> 或 w写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。>> 或 a写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。+< 或 r+读写方式打开,将文件指针指向文件头。+> 或 w+读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。+>> 或 a+读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。Sysopen函数sysopen 函数类似于 open 函数,只是它们的参数形式不一样。以下实例是以读写(+<filename)的方式打开文件:sysopen(DATA, "file.txt", O_RDWR);如果需要在更新文件前清空文件,则写法如下:sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );你可以使用 O_CREAT 来创建一个新的文件, O_WRONLY 为只写模式, O_RDONLY 为只读模式。The PERMS 参数为八进制属性值,表示文件创建后的权限,默认为 0x666。下表列出了可能的模式值:模式描述O_RDWR读写方式打开,将文件指针指向文件头。O_RDONLY只读方式打开,将文件指针指向文件头。O_WRONLY写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。O_CREAT创建文件O_APPEND追加文件O_TRUNC将文件大小截为零O_EXCL 如果使用O_CREAT时文件存在,就返回错误信息,它可以测试文件是否存在O_NONBLOCK 非阻塞I/O使我们的操作要么成功,要么立即返回错误,不被阻塞。 Close 函数在文件使用完后,要关闭文件,以刷新与文件句柄相关联的输入输出缓冲区,关闭文件的语法如下:close FILEHANDLEcloseFILEHANDLE 为指定的文件句柄,如果成功关闭则返回 true。close(DATA) || die "无法关闭文件";读写文件向文件读写信息有以下几种不同的方式:<FILEHANDL> 操作符从打开的文件句柄读取信息的主要方法是 <FILEHANDLE> 操作符。在标量上下文中,它从文件句柄返回单一行。例如:实例





#!/usr/bin/perlprint "k88.net网址?\n";$name = <STDIN>;print "网址:$name\n";以上程序执行后,会显示以下信息,我们输入网址后 print 语句就会输出:当我们使用 <FILEHANDLE> 操作符时,它会返回文件句柄中每一行的列表,例如我们可以导入所有的行到数组中。实现创建 import.txt 文件,内容如下:$ cat import.txt 123读取 import.txt 并将每一行放到 @lines 数组中:实例





#!/usr/bin/perlopen(DATA,"<import.txt") or die "无法打开数据";@lines = <DATA>;print @lines;





# 输出数组内容close(DATA);执行以上程序,输出结果为:123getc 函数xgetc 函数从指定的 FILEHANDLE 返回单一的字符,如果没指定返回 STDIN:getc FILEHANDLEgetc如果发生错误,或在文件句柄在文件末尾,则返回 undef。read 函数read 函数用于从缓冲区的文件句柄读取信息。这个函数用于从文件读取二进制数据。read FILEHANDLE, SCALAR, LENGTH, OFFSETread FILEHANDLE, SCALAR, LENGTH参数说明:





FILEHANDLE:文件句柄,用于存放一个文件唯一标识符。SCALAR:存贮结果,如果没有指定OFFSET,数据将放在SCALAR的开头。否则数据放在SCALAR中的OFFSET字节之后。LENGTH:读取的内容长度。OFFSET:偏移量。如果读取成功返回读取的字节数,如果在文件结尾返回 0,如果发生错误返回 undef。print 函数对于所有从文件句柄中读取信息的函数,在后端主要的写入函数为 print:print FILEHANDLE LISTprint LISTprint利用文件句柄和 print 函数可以把程序运行的结果发给输出设备(STDOUT:标准输出),例如:print "Hello World!\n";文件拷贝以下实例我们将打开一个已存在的文件 file1.txt ,并读取它的每一行写入到文件 file2.txt 中:实例





#!/usr/bin/perl





# 只读方式打开文件open(DATA1, "<file1.txt");





# 打开新文件并写入open(DATA2, ">file2.txt");





# 拷贝数据while(<DATA1>){print DATA2 $_;}close( DATA1 );close( DATA2 );文件重命名以下实例,我们将已存在的文件 file1.txt 重命名为 file2.txt,指定的目录是在 /usr/k88/test/ 下:





#!/usr/bin/perlrename ("/usr/k88/test/file1.txt", "/usr/k88/test/file2.txt" );函数 renames 只接受两个参数,只对已存在的文件进行重命名。删除文件以下实例我们演示了如何使用 unlink 函数来删除文件:实例





#!/usr/bin/perlunlink ("/usr/k88/test/file1.txt");指定文件位置你可以使用 tell 函数来获取文件的位置,并通过使用 seek 函数来指定文件内的的位置:tell 函数tell 函

[1] [2]  下一页


Perl 文件操作