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 也会自动关闭他。 |