一、Perl句柄
1、定义:Perl通过句柄与“外部”的世界的连接,句柄是一个顺序号,对于打开的文件是唯一的识别依据。是一种特殊的“数据类型”。
2、间接文件句柄:任何有效的Perl标识符组成,但没有标志性的前缀,经常以大写字母表示他们。
(1)STDIN(standardinput):默认的输入间接Perl文件句柄。
文件句柄读取的数据取自用户选择的输入设备,通常是键盘。
(2)STDOUT(standardoutput):默认的输出间接Perl文件句柄。
发送给该文件句柄的数据在用户指定的输出设备上显示,通常为命令窗口。
(3)STDERR(standarderror):用于错误信息、诊断、调试和其他类似的偶发输出。
3、自定义句柄:由用户自己指定文件,获取该文件的标识。
二、打开文件
1、使用open函数打开文件
(1) 语法:open(filehandle,pathname)
第一个参数为句柄名,第二个参数为文件路径名。
打开成功,返回一个非0值,否则返回undef(假)。
(2)路径名
不指定绝对路径时,使用当前目录下的文件,若要打开位于另一个目录中的文件,必须使用路径名。
Windows | open(FILE,"DISK:[USER.PIERCE>NOVEL]") |
Mac | open(FILE,"Drive:folder:file") |
Linux | open(FILE,"/usr/pierce/novel") |
说明
(1)在Windows下,可以使用反斜杠作为路径名分隔符:eg:windows\\user\pierce\novel.txt,容易与转移字符混淆。open(FILE,"/windows/user/pierce/novel.txt") #系统可以自动切换
(2)绝对路径:Windows:c:/Windows/win.ini;UNIX: /home/foo。open函数也接受相对路径:../junkfile #当前目录上级目录的文件。open函数也接受Windows下的通用命名约定路径名:\\machinename\sharename。
2、die函数
在Perl中,die函数可以用来在出现错误的时候停止解释程序的运行,并输出一条有意义的出错消息:Died at scriptname line xxxx
语法:open(FILE,pathname)||die或open(FILE,pathname) or die,函数也可以带有自定义的参数,这些参数将取代默认消息被输出。eg:die "info"
使用“$!”得到系统所需要的最后一个操作的出错消息。
3、warn函数:用来发出一个警告,不会终止程序。
三、读写文件
1、使用文件输入操作符(尖括号运算符、钻石符)读入文件。
语法:open(FILE,"filename") || die "Can't open the file";
$line=<FILE> #读取文件
说明:尖括号运算符读取文件的一行输入,文件被读完时,返回值undef;利用循环结构来读取所有数据;可通过数组接收所有输入数据。
2、写入文件
语法:open(FILE,">pathname") #覆盖写入文件
open(FILE,">>pathname") #追加写入文件
写入具体内容:使用print函数。
语法:print filehandle LIST。注意:上面的语句中没有逗号分隔符。
eg:
1 #!/usr/bin/perl
2 use strict;
3 print"---------------------read out file X 1\n";
4 open(RFILE,"mydatafile.txt") || die "cannot open file:$!\n";
5 my @array = <RFILE>;
6 print"@array\n";
7 close MYFILE;
8
9 open(WFILE,">mydatafile.txt") || die "cannot open file:$!\n";
10 print WFILE "abc";
11 close WFILE;
12
13 print"---------------------read out file X 2\n";
14 open(RFILE,"mydatafile.txt") || die "cannot open file:$!\n";
15 my @array = <RFILE>;
16 print"@array\n";
17 close RFILE;
关闭文件句柄:close(FILE)。
3、二进制文件的读写
在Windows中,对文本文件和二进制文件进行了区分,Perl无法知道它们之间的差别。
如需写入二进制数据,使用binmode。eg:binmode(FILE);
四、文件测试运算符
测试文件的必要性:实际的读写速度比较慢;读写时容易产生错误。Perl提供了文件测试符。
运算符 | 举例 | 结果 |
-r | -r ‘file’ | 可以读取‘file’,则返回值 |
-w | -w $a | $a中包含的文件名是可以写入的文件名,则返回真 |
-e | -e 'myfile' | 'myfile'存在,则返回真 |
-z | -z 'data' | 'data'存在,但是它是空的,则返回真 |
-s | -s 'data' | 'data'存在,则返回‘data’的大小 |
-f | -f 'novel.txt' | 'novel.txt'是个普通文件,则返回真 |
-d | -d '/tmp' | '/tmp'是个目录,则返回真 |
-T | -T ‘unknow’ | 'unknow'显示为一个文本文件,则返回真 |
-B | -B ‘unknow’ | ‘unknow’显示为一个二进制文件,则返回真 |
-M | -M ‘foo’ | 返回程序启动运行以来'foo'文件被修改后经过的时间 |