Perl 文件操作学习笔记
概述
在 Perl 中,文件操作是一种常见的任务。这篇学习笔记将会介绍如何在 Perl 中进行文件读写操作和文件处理操作。
文件读写操作
打开文件
在 Perl 中,我们可以使用 open
函数来打开一个文件。函数原型如下:
Copy Codeopen FILEHANDLE, EXPR
其中,FILEHANDLE
是一个标识符,用于指代该文件的句柄;EXPR
是文件名或者是与文件相关的表达式。
例如,下面的代码片段演示了如何打开一个名为 example.txt
的文件:
perlCopy Codeopen(my $fh, '<', 'example.txt')
or die "Could not open file '$filename' $!";
$fh
- 文件句柄'<'
- 表示打开文件进行读操作'example.txt'
- 要打开的文件名
如果打开文件失败,die
会输出错误信息并结束程序。如果成功打开文件,则可以通过该句柄操作文件。
读取文件
在 Perl 中,我们可以使用 <FILEHANDLE>
或者 readline(FILEHANDLE)
函数来读取文件。例如,下面的代码片段演示了如何从一个打开的文件中读取文件内容:
perlCopy Codewhile(my $row = <FH>) {
chomp $row; # 去掉每行末尾的换行符
print "$row\n";
}
每次执行 <FH>
或者 readline(FH)
时,都会从文件句柄中读取一行数据,直到文件的末尾。通过 chomp
函数去掉每行末尾的换行符后,就可以输出文件内容了。
写入文件
在 Perl 中,我们可以使用 print
函数来向一个打开的文件中写入数据。例如,下面的代码片段演示了如何向一个名为 example.txt
的文件中写入文本:
perlCopy Codeopen(my $fh, '>', 'example.txt')
or die "Could not open file '$filename' $!";
print $fh "Hello, world!\n";
'>'
- 表示打开文件进行写操作"Hello, world!\n"
- 要写入文件的文本内容
通过传入文件句柄 $fh
,print
函数可以将字符串输出到该文件句柄指向的文件中。
文件处理操作
Perl 中还有很多其他的函数可以帮助我们对文件进行处理,例如:rename
、delete
、stat
、chmod
和 chown
等等。接下来,我们将介绍其中的一些常用函数。
删除文件
在 Perl 中,我们可以使用 unlink
函数来删除一个文件。例如,下面的代码片段演示了如何删除一个名为 example.txt
的文件:
perlCopy Codeunlink('example.txt');
文件属性
在 Perl 中,我们可以使用 stat
函数来获取文件的属性信息。例如,下面的代码片段演示了如何获取一个名为 example.txt
的文件的大小、修改时间和访问时间:
perlCopy Codemy $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 Coderename("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
中。