文件句柄和读写文件

Perl通过文件句柄(file handle)来处理文件数据:打开某文件时指定一个文件句柄,之后通过这个文件句柄来读写该文件的数据。例如:

# 读:打开/tmp/a.log文件,准备从/tmp/a.log文件中读取数据
open my $fh, "<", "/tmp/a.log";
my @lines = <$fh>;  # 读取所有行保存到@lines数组中

# 写:打开/tmp/b.log文件,准备向/tmp/b.log文件中写入数据
open my $fh, ">", "/tmp/b.log";
print $fh "hello world\n";  # 向/tmp/b.log写入数据

从示例代码大概可以知道,文件句柄是一种特殊的标量变量。

在IO角度上看,文件句柄和操作系统的文件描述符(File Descriptor)类似,操作文件句柄是操作文件描述符更高层次的封装,它类似于C语言标准IO库的IO流(io stream)或其他语言标准IO库的文件对象。

Perl在文件句柄层次提供了比文件描述符层次更多的功能,比如数据缓冲功能、换行符识别处理功能,等等。如果关闭文件句柄的所有高级功能,则表示使用裸文件句柄,即等价于直接使用底层的文件描述符。