perl程序设计(十三)

/ns/wz/comp/data/20010319094657.htm

大多数程序都不是孤立的,它们与它们的环境相互作用。很多的程序
也需要通过文件操作实现数据的存贮和交换。 文件句柄(file handle)是
Perl程序中为程序和外部世界提供I/O连接的名称。建议全部使用大写字
母以示与变量等的区别。特别地,也可以将STDIN/STDOUT/STDERR也认为
是Perl的文件句柄,分别代表标准输入/标准输出/标准错误输出。

打开及关闭文件

Perl的文件操作与C语言极为相似。如:

open(FILENAME,"abc.txt");

该调用为读文件打开,若为写文件而打开,需在文件名前加上大于
号:

open(FILENAME,">abc.txt");

若要追加至文件尾,可在文件名前加上两个大于号:

open(FILENAME,">>abc.txt");

以上三种open()格式在成功时返回真,失败时返回假。但程序中通常
没有提示,出错时往往会被人们忽略。 通常当需要给出出错提示时,可
加入die()函数。例:

open(OUTFILE,">/tmp/outfile")||
die "出错,不能建立/tmp/outfile\n";

当只有open失败时,才会执行die给出出错提示。

对文件句柄的操作完成后,可以用close操作符关闭文件。如:

close(OUTFILE);

-x 文件测试

Perl的文件操作也可以先测试文件是否存在,是否可读写等。如:

$x="abc.txt";
if(-e $x) { #abc.txt是否存在?
# 存在操作
} else {
printf "文件不存在。\n";
}

-e操作符测试文件或目录是否存在。

以下为文件测试清单:

文件测试
测试操作符提供的信息
-r
文件或目录可读
-w
文件或目录可写
-x
文件或目录执行
-o
文件或目录归用户所有
-R
文件或目录对真正用户可读
-W
文件或目录对真正用户可写
-X
文件或目录对真正用户执行
-O
文件或目录归真正用户所有
-e
文件或目录存在
-z
文件存在且大小为0
-s
文件或目录存在且不为0(返回字节数)
-f
文件为普通文件
-d
文件为目录
-l
文件为符号链接
-p
文件为命名管道(FIFO)
-S
文件为一个套口(socket)
-b
文件为块特殊文件
-c
文件为字符特殊文件
-t
打开tty控制台的文件句柄
-u
文件或目录是设置用户ID号
-g
文件或目录是设置用户组ID号
-k
文件或目录的sticky位置位
-T
文件是文本文件
-B
文件是二进制文件
-M
以天为单位的存在时间
-A
以天为单位访问时间
-C
以天为单位同代码更改时间


删除文件

Perl的unlink()操作符可实现删除文件。如:

unlink("abc.txt"); #删除abc.txt

文件重命名

Perl的rename()操作符可实现文件重命名。如:

rename("abc","zmd")||die "出错,不能更名";

此时将abc更名为zmd,成功返回真,否则给出出错提示。

目录操作

Perl中处理目录非常类似于处理文件。

打开目录句柄:

opendir(ETC,"/etc")||die "出错,不能打开目录";

关闭目录句柄:

closedir(ETC);

创建目录:

mkdir("zmd",0777)||die "不能创建zmd目录";

0777为内部权限格式。

删除目录:

rmdir("zmd")||die "不能删除zmd目录";