Perl文件读取的经典用法分享_perl

用Open() 函数打开文件

打开文件的常用方法是:

复制代码 代码如下:

open(FH, "< $filename")
or die "Couldn't open $filename for reading: $!";

open() 函数通常带有两个参数,第一个为文件句柄,用于指向打开的文件,第二个参数是文件名及模式(文件的打开模式)的混合体,如果文件被成功打开,open()函数返回true,否则为false。我们用“or”来测试该条件。

上述代码中的模式由小于字符(<)来表示。如果文件不存在,open()将返回false。此时,你可以读文件句柄,但不可以写。

大于字符表示写。如果文件不存在,就会被创建。如果文件存在,文件被清除,以前的数据将会丢失。你可以写入文件句柄,但不可以读入。

复制代码 代码如下:

# 如果文件不存在,就创建它
open(FH, "> $filename")
or die "Couldn't open $filename for writing: $!";

如果文件不存在,添加模式(用两个大于符号表示)可以用来创建新文件,如果文件存在,该模式并不会清除原来的数据。

同“<”或“读”模式一样,你只能对文件句柄进行写操作。 (所以的写入内容都添加到文件尾)。企图进行读操作,会产生运行错误。

复制代码 代码如下:

open(FH, ">> $filename")
or die "Couldn't open $filename for appending: $!";

通过“+<”模式,你可以既可以读文件,又可以写文件。你可以通过tell() 函数在文件内部移动,通过seek()函数进行定位。如果文件不存在,就会被创建。如果文件已经存在,原来的数据不会被清除。

如果你打算清除原来的文件内容,或者自己调用truncate() 函数,或者使用“+>”模式。

复制代码 代码如下:

open(FH, "+> $filename")
or die "Couldn't open $filename for reading and writing: $!";

注意“+<”和“+>”的区别,两者都可以可读可写。前者为非破坏性写,后者为破坏性写。

错误

错误是如何出现的?很多地方都会出现错误:如目录不存在,文件不可写入,你的程序丢失了文件句柄等等。

你应该检查系统调用的结果 (如open() 和sysopen()),看看是否调用成功。

为了帮助用户查错,通常使用“or die()”,你应记住这些用法。首先,应写出系统调用失败(“open”)的信息。其次,应写出文件名的信息,以便修正错误时更容易地定位。第三,要写出打开文件的方式, (“for writing,”“for appending”)。第四,输出操作系统的出错信息(包含在$!中)。这样,一旦出现文件不能打开的问题,使用你的程序的用户会大体上知道为什么不能打开。有时,我们把第一个和第三个合并在一起:
or die "unable to append to $filename: $!";

如果在open() 和出错信息中都写了文件的全名,你会冒改变了open() 的风险,使得出错信息不合时宜或不正确。

复制代码 代码如下:

# 下面会出现虚假的出错信息
open(FH, "</var/run/file.pid")
or die "Can't open /var/log/file.pod for writing : $!";

用 Sysopen()进行更多的控制
为了更好的控制文件的打开方式,可以使用 sysopen() 函数:

复制代码 代码如下:

use Fcntl;
sysopen(FH, $filename, O_RDWR|O_CREAT, 0666)
or die "Can't open $filename for reading/writing/creating : $!";

函数 sysopen() 带有四个参数,第一个是同open()函数类似的文件句柄参数,第二个参数是不带模式信息的文件名,第三个参数是模式参数,由Fcntl 模块提供的逻辑OR运算组合起来的常数构成,第四个参数(可选),为八进制属性值(0666表示数据文件, 0777表示程序)。如果文件可以被打开,sysopen() 返回true,如果打开失败,则返回false。

不同于open()函数,sysopen()不提供模式说明的简写方式,而是把一些常数组合起来,而且,每个模式常数有唯一的含义,只有通过逻辑OR运算才能将它们组合起来,你可以设置多个行为的组合。

O_RDONLYRead-only
O_WRONLY Write-only
O_RDWR Reading and writing
O_APPEND Writes go to the end of the file
O_TRUNC Truncate the file if it existed
O_CREAT Create the file if it didn't exist
O_EXCLError if the file already existed (used with O_CREAT)

当你需要小心行事的时候,就使用sysopen() 函数,例如,如果你打算添加内容到文件中,如果文件不存在,不创建新文件,可以这样写:

复制代码 代码如下:

sysopen(LOG, "/var/log/myprog.log", O_APPEND, 0666)
or die "Can't open /var/log/myprog.log for appending: $!";

时间: 2024-09-20 10:53:17

Perl文件读取的经典用法分享_perl的相关文章

Perl的经典用法分享_perl

用Open() 函数打开文件 打开文件的常用方法是: 复制代码 代码如下: open(FH, "< $filename")    or die "Couldn't open $filename for reading: $!"; open() 函数通常带有两个参数,第一个为文件句柄,用于指向打开的文件,第二个参数是文件名及模式(文件的打开模式)的混合体,如果文件被成功打开,open()函数返回true,否则为false.我们用"or"来测试

perl文件操作的一些例子分享_perl

删除文件 使用unlinke函数,比如unlink $file, unlink $file1, $file2, $file3 打开文件 使用三参数的形式打开文件,这样非常便于区分模式和文件名,perl 5.6之后的版本都支持这种方式. 复制代码 代码如下: #Open the 'txt' file for readingopen FH, '<', "$file_name.txt" or die "Error:$!\n";#Open the 'txt' file

perl文件读取的几种处理方式小结_perl

1.单行(大文件处理): 复制代码 代码如下: my $oneline = <$FL> 或while($line=<H>){ } 2.读取全部(小文件处理): 复制代码 代码如下: open (my $in, "path ") or die "open error: $! "; my @lines = <$in> ; 3.读3行(大文件及特殊处理需要): 复制代码 代码如下: open (my $in, "path &q

Perl split字符串分割函数用法指南_perl

本文和大家重点讨论一下Perl split函数的用法,Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中.这个Perl split函数使用规则表达式(RE),如果未特定则工作在$_变量上. Perl split函数 Perl中的一个非常有用的函数是Perl split函数-把字符串进行分割并把分割后的结果放入数组中.这个Perl split函数使用规则表达式(RE),如果未特定则工作在$_变量上. Perl split函数可以这样使用:  复制代

Linux/Unix下安装Perl模块的两种方法分享_perl

方法一.手工安装的步骤 从CPAN下载了DBI模块1.13版的压缩文件DBI-1.13.tar.gz,假设放在/usr/local/src/下. cd /usr/local/src 解压缩这个文件: tar xvzf DBI-1.13.tar.gz 这时会新建一个DBI-1.13的目录. cd DBI-1.13 生成makefile: perl Makefile.PL 建立模块 make 测试模块 make test 如果测试结果报告"all test ok",您就可以放心地安装编译好

Android开发实现Files文件读取解析功能示例

本文实例讲述了Android开发实现Files文件读取解析功能.分享给大家供大家参考,具体如下: package com.example.file; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widg

C语言读取文件流的相关函数用法简介_C 语言

C语言fread()函数:读文件函数(从文件流读取数据) 头文件: #include <stdio.h> 定义函数: size_t fread(void * ptr, size_t size, size_t nmemb, FILE * stream); 函数说明:fread()用来从文件流中读取数据. 参数stream 为已打开的文件指针, 参数ptr 指向欲存放读取进来的数据空间, 读取的字符数以参数size*nmemb 来决定. Fread()会返回实际读取到的nmemb 数目, 如果此值

php安装php_rar扩展实现rar文件读取和解压的方法_php技巧

本文实例讲述了php安装php_rar扩展实现rar文件读取和解压的方法.分享给大家供大家参考,具体如下: PHP Rar Archiving 模块 (php_rar) 是一个读取和解压rar文件的模块,但不提供RAR压缩(打包)的功能. 1.首先要到PECL的RAR页面下载DLL. 根据自己的情况选择下载对应版本的DLL. PHP版本要求:php_rar模块适用于php 5.2及以上, 不过对于windows系统,似乎只有php5.3 / 5.4对应的DLL下载. 2.下载到的是个zip包,将

Java经典用法总结(二)_java

接着上一篇再为大家介绍java应用和输入输出常用方法,供大家参考,具体内容如下 一.应用 1.使用StringBuilder或StringBuffer // join(["a", "b", "c"]) -> "a and b and c" String join(List<String> strs) { StringBuilder sb = new StringBuilder(); boolean first