Perl 文件操作学习笔记

概述

在 Perl 中,文件操作是一种常见的任务。这篇学习笔记将会介绍如何在 Perl 中进行文件读写操作和文件处理操作。

文件读写操作

打开文件

在 Perl 中,我们可以使用 open 函数来打开一个文件。函数原型如下:

Copy Code
open FILEHANDLE, EXPR

其中,FILEHANDLE 是一个标识符,用于指代该文件的句柄;EXPR 是文件名或者是与文件相关的表达式。

例如,下面的代码片段演示了如何打开一个名为 example.txt 的文件:

perlCopy Code
open(my $fh, '<', 'example.txt') or die "Could not open file '$filename' $!";
  • $fh - 文件句柄
  • '<' - 表示打开文件进行读操作
  • 'example.txt' - 要打开的文件名

如果打开文件失败,die 会输出错误信息并结束程序。如果成功打开文件,则可以通过该句柄操作文件。

读取文件

在 Perl 中,我们可以使用 <FILEHANDLE> 或者 readline(FILEHANDLE) 函数来读取文件。例如,下面的代码片段演示了如何从一个打开的文件中读取文件内容:

perlCopy Code
while(my $row = <FH>) { chomp $row; # 去掉每行末尾的换行符 print "$row\n"; }

每次执行 <FH> 或者 readline(FH) 时,都会从文件句柄中读取一行数据,直到文件的末尾。通过 chomp 函数去掉每行末尾的换行符后,就可以输出文件内容了。

写入文件

在 Perl 中,我们可以使用 print 函数来向一个打开的文件中写入数据。例如,下面的代码片段演示了如何向一个名为 example.txt 的文件中写入文本:

perlCopy Code
open(my $fh, '>', 'example.txt') or die "Could not open file '$filename' $!"; print $fh "Hello, world!\n";
  • '>' - 表示打开文件进行写操作
  • "Hello, world!\n" - 要写入文件的文本内容

通过传入文件句柄 $fhprint 函数可以将字符串输出到该文件句柄指向的文件中。

文件处理操作

Perl 中还有很多其他的函数可以帮助我们对文件进行处理,例如:renamedeletestatchmodchown 等等。接下来,我们将介绍其中的一些常用函数。

删除文件

在 Perl 中,我们可以使用 unlink 函数来删除一个文件。例如,下面的代码片段演示了如何删除一个名为 example.txt 的文件:

perlCopy Code
unlink('example.txt');

文件属性

在 Perl 中,我们可以使用 stat 函数来获取文件的属性信息。例如,下面的代码片段演示了如何获取一个名为 example.txt 的文件的大小、修改时间和访问时间:

perlCopy Code
my $filename = 'example.txt'; my @fileinfo = stat($filename); print "File size: $fileinfo[7] bytes\n"; print "Last modified: ". localtime($fileinfo[9]). "\n"; print "Last accessed: ". localtime($fileinfo[8]). "\n";

$fileinfo[7] 表示文件大小,$fileinfo[9] 表示最后修改时间,$fileinfo[8] 表示最后访问时间。

重命名文件

在 Perl 中,我们可以使用 rename 函数来重命名文件。例如,下面的代码片段演示了如何将一个名为 oldname.txt 的文件重命名为 newname.txt

perlCopy Code
rename("oldname.txt", "newname.txt");

实例

下面是一个完整的实例,演示了如何打开一个文件、读取其中的内容、再将处理后的内容写入新文件:

perlCopy Code
#!/usr/bin/perl use strict; use warnings; # 打开文件 my $filename = 'example.txt'; open(my $fh, '<', $filename) or die "Could not open file '$filename' $!"; # 读取文件内容 my @lines; while(my $row = <$fh>) { chomp $row; push @lines, $row; } # 处理文件内容 foreach my $line (@lines) { $line =~ s/\bthe\b/xxx/g; } # 写入新文件 my $newfilename = 'example_new.txt'; open(my $new_fh, '>', $newfilename) or die "Could not open file '$newfilename' $!"; foreach my $line (@lines) { print $new_fh "$line\n"; } # 关闭文件句柄 close($fh); close($new_fh); print "Done.\n";

该程序会将原始文件 example.txt 中出现的单词 the 替换为 xxx,并将处理后的内容写入新文件 example_new.txt 中。