曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4102|回复: 0
打印 上一主题 下一主题

操作文件句柄

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2011-9-25 18:07:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 只读文件句柄
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl
open TEMP, "<temp.txt";
while (<TEMP>) {
        print "$_";}


打开一个文件句柄使用 open 。open TEMP, "temp.txt"; 就是打开一个文件句柄 TEMP,并使其指向文件 temp.txt,此后便可使用这个句柄来读 temp.txt 这个文件。实际上,STDIN, STDOUT, STDERR 是对应于标准输入,标准输出,标准错误的 3 个句柄,在使用句柄时,用两边的尖括号将句柄包起来。
运行输出:
./handle.pl
hello world
hello perl
如果使用 open TEMP, "temp.txt"; (没有小于号) 语句也可以达到读取的目的,但程序中的用法会更安全些,一般情况下,两种表示法都可以使用。
2. 写文件句柄
[Perl] 纯文本查看 复制代码
#!/usr/bin/perl
open TEMP, ">temp.txt";
print TEMP "--------------------";


注意 temp.txt 前面有一个小于号,这和 shell 里的重定向符号功能类似,表示需要将内容写入文件。如果文件中原本就有内容,那么这些内容就会被清除。所以,在运行上面程序后,temp.txt 中原有的内容会被清除,然后写入 ”--------------------“ 这一行符号。

3. 追加方式写文件句柄
和 shell 里的 echo 命令使用 '>>' 符号追加内容到文本文件一样,如果使用 open TEMP, ">>temp.txt"; 这样的方式打开一个文件句柄,那表示利用这个句柄可以往文件中追加内容,而不会删除掉文件中原有内容。

在新版的 Perl 中,上面的几种方式还可以写成以下形式:
open TEMP, "<", "temp.txt";
open TEMP, ">", "temp.txt";
open TEMP, ">>", "temp.txt";
有时候可能会因为权限不足,文件名错误等原因打不开句柄。为了避免这种情况,我们可以一开始就用 -w 选项或者 warning 编译命令来启用警告信息,那么在使用了不正确的句柄时,Perl 通常会发出警告。如果没有警告,我们还可以通过声明一个变量,用其捕获打开句柄操作的返回值,如果为 0 则 open 操作失败,比如:
[Perl] 纯文本查看 复制代码
my $ret = open TEMP, ">>/etc/sudoers";
if (!ret) {
   # open 失败
   ...
}


在上面的两个示例程序中,我们并没有涉及关闭文件句柄的操作。打开句柄,当不用它时,将其关闭是个好习惯。关闭句柄使用 close 操作符,比如 close TEMP; 。
当关闭文件句柄时,Perl 会通知操作系统:我们对数据流的处理已经完成,请你将尚未写入的输出数据写到磁盘。另外,如果重新打开了某个文件句柄,也就是在新的 open 命令中重用之前的文件句柄名,那么 Perl 会自动关闭原先的文件句柄。在程序结束时,即使你没有明确使用 close 关闭文件句柄,但 Perl 也会自动关闭他。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-3 23:44 , Processed in 0.068680 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表