Perl 文件处理

2024 年 8 月 29 日 | 阅读 6 分钟

文件处理是任何编程语言中最重要的部分。文件句柄是 Perl 的一个内部结构,它与文件名相关联。

Perl 文件处理很重要,因为它有助于访问文件,如文本文件、日志文件或配置文件。

Perl 文件句柄能够创建、读取、打开和关闭文件。


Perl 创建文件

我们正在创建一个名为 file1.txt 的文件,借助 open() 函数。

$fh (文件句柄) 是一个标量变量,我们可以在 open() 函数内部或之前定义它。在这里,我们在函数内部定义它。'>' 符号表示我们正在以写入模式打开此文件。$filename 表示路径或文件位置。

文件打开后,在 print 语句中使用 $fh。print() 函数将在文件中打印上述文本。

现在我们正在关闭 $fh。嗯,在 perl 中关闭文件不是必需的。当变量超出范围时,您的文件将自动关闭。

输出

done.
将在我们的系统中创建一个文件 file1.txt。

Perl 打开文件

我们可以通过以下方式打开文件

(<) 语法

< 符号用于打开一个已存在的文件。它以读取模式打开文件。

(>) 语法

> 符号用于打开并创建文件(如果它不存在)。它以写入模式打开文件。

"<" 符号将在打开文件之前清空文件。它将清除该文件中的所有数据。要防止这种情况,请在 ">" 或 "<" 字符前使用 (+) 符号。

(+>+<) 语法

(>>) 语法

>> 符号用于读取并追加文件内容。它将文件指针置于文件的末尾,您可以在其中追加信息。同样,要从这个文件中读取,您需要在 ">>" 符号前放置 (+) 符号。


Perl 读取文件

您可以一次读取完整的文件,也可以一次读取一行。我们将展示一个例子。打开文件进行读取与打开文件进行写入类似。唯一的区别是使用 ">" 进行写入,使用 "<" 读取文件。

我们创建了一个文件 file1.txt,内容如下


一次读取单行

将显示 file1.txt 的第一行。$row 的内容将与 "done" 一起打印,以明确表明我们已到达程序的末尾。

输出

This is the First Line.
Done.

一次读取多行

现在我们知道如何从文件中读取单行。要读取多行,请将 $row 放在 while 循环中。

每次 while 循环达到其条件时,它将执行 my $row = <$fh>。它将从文件中读取下一行。在最后一行,$fh 将返回 undef,它是 false,循环将终止。

输出

This is the First Line.
This is the Second Line.
This is the Third Line.
This is the Fourth Line.
Done.

Perl 写入文件

通过文件写入,我们将向 file1.txt 文件中追加行。如前所述,新行将添加到文件的末尾。

输出

This line is added in the file1.txt
A complete new file is created

Perl 关闭文件

Perl 关闭文件用于使用 close() 函数关闭文件句柄。在 perl 中,关闭文件不是强制性的。一旦变量超出范围,Perl 会自动关闭文件。


Perl 文件句柄运算符,<FILEHANDL>

文件句柄运算符是读取文件信息的主要方法。它用于从用户获取输入。在标量上下文中,它从文件句柄返回单行,在行上下文中,它从文件句柄返回一系列行。

输出

1. What is your age?
      18
      You are eligible to vote
2.	What is your age?
      16
       You are not eligible to vote.

Perl 文件句柄 print() 函数

print() 函数打印通过文件句柄运算符给出的信息。

输出

	
Welcome to my site	

Perl 复制文件

我们可以将一个文件的内容原样复制到另一个文件中。首先打开文件 1,然后打开文件 2。通过使用 while 循环读取文件 1 的行,将文件 1 的内容复制到文件 2。

输出

	
done

将在 file1.pl 存在的位置创建一个新文件 file2.pl。


Perl 文件测试运算符

有不同的测试运算符可以检查有关文件的不同信息。一些测试运算符如下

测试运算符描述
-A返回程序开始后文件的总访问时间。
-b检查文件是否为块设备。
-B检查它是否为二进制文件。
-c检查文件是否为字符设备。
-C返回程序开始后文件的 inode 更改时间。
-d检查文件是否为目录。
-e检查文件是否存在。
-f检查文件类型,是常规文件、符号链接还是其他类型的文件。
-g检查文件是否设置了 setgid 位。
-k检查文件是否设置了粘滞位。
-l检查文件是否为符号链接。在 dos 中,它总是返回 false。
-M以天为单位返回程序开始后文件的修改时间。
-o检查文件是否由有效 uid 拥有,在 dos 中,它总是返回 true。
-O检查文件是否由真实 uid 拥有,在 dos 中,它总是返回 true。
-p检查文件是否为命名管道。
-r检查文件是否可读。
-R检查文件是否可由真实 uid 读取。在 dos 中,它与 -r 相同。
-s以字节为单位返回文件大小。
-S检查文件是否为套接字。
-t检查文件是否已打开到 tty(终端)
-T检查文件是否为文本文件。
-u检查文件是否设置了 setuid 位。
-w检查文件是否可写。
-W检查文件是否可由真实 uid/gid 写入。
-x检查文件是否可以执行。
-X检查文件是否可以由真实 uid/gid 执行。
-z检查文件大小是否为零。

Perl 使用文件测试运算符

为了在 Perl 中测试不同的特性,存在一系列测试运算符。在给定的示例中,我们测试了 file1.txt 的不同特性。所有结果都与 join() 函数合并。

输出

	
file1.txt is a text file, 67 bytes
下一个主题Perl chop() Vs chomp()