HoRain云--Perl文件操作

🎬 HoRain云小助手:个人主页
🔥 个人专栏: 《Linux 系列教程》《c语言教程》
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
专栏介绍
|
专栏名称 |
专栏介绍 |
|
本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。 |
|
|
本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制! |
|
|
全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。 |
|
|
本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。 |
|
|
本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。 |
|
|
本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等) |
目录

Perl 文件操作是处理文本文件、二进制文件等数据存储的核心功能,主要通过文件句柄(filehandle)来实现输入输出。
一、文件句柄与打开关闭
打开文件
# 读取模式(默认)
open(my $fh, '<', 'filename.txt') or die "无法打开文件: $!";
# 写入模式(覆盖)
open(my $fh, '>', 'filename.txt') or die "无法创建文件: $!";
# 追加模式
open(my $fh, '>>', 'filename.txt') or die "无法追加到文件: $!";
# 读写模式
open(my $fh, '+<', 'filename.txt') or die "无法读写文件: $!";
关闭文件
close($fh) or warn "关闭文件时出错: $!";
二、读取文件内容
逐行读取
while (my $line = <$fh>) {
chomp($line); # 去除换行符
print "行内容: $line\n";
}
一次性读取全部内容
# 读取到标量
my $content = do { local $/; <$fh> };
# 读取到数组(每行一个元素)
my @lines = <$fh>;
读取特定字节
my $buffer;
read($fh, $buffer, 1024); # 读取1024字节
三、写入文件内容
写入字符串
print $fh "Hello, World!\n";
print $fh "第二行内容\n";
格式化写入
printf $fh "格式化的数字: %.2f\n", 3.14159;
写入数组内容
my @data = ("第一行", "第二行", "第三行");
print $fh join("\n", @data), "\n";
四、文件测试操作符
Perl 提供丰富的文件测试操作符:
-
-e $file:文件是否存在 -
-f $file:是否为普通文件 -
-d $file:是否为目录 -
-r $file:是否可读 -
-w $file:是否可写 -
-x $file:是否可执行 -
-s $file:文件大小(字节) -
-M $file:文件最后修改时间(天数) -
-z $file:文件是否为空
if (-e "data.txt") {
print "文件存在\n";
if (-s "data.txt") {
print "文件大小: " . (-s "data.txt") . " 字节\n";
}
}
五、目录操作
创建目录
mkdir "new_directory", 0755 or die "无法创建目录: $!";
删除目录
rmdir "empty_directory" or die "无法删除目录: $!";
读取目录内容
opendir(my $dh, ".") or die "无法打开目录: $!";
while (my $entry = readdir($dh)) {
next if $entry =~ /^\.\.?$/; # 跳过 . 和 ..
print "文件: $entry\n";
}
closedir($dh);
六、文件重命名与删除
重命名文件
rename("oldname.txt", "newname.txt") or die "重命名失败: $!";
删除文件
unlink("file_to_delete.txt") or die "删除失败: $!";
七、二进制文件处理
读取二进制文件
open(my $fh, '<:raw', 'image.jpg') or die "无法打开二进制文件: $!";
binmode($fh); # 确保二进制模式
写入二进制文件
open(my $fh, '>:raw', 'output.bin') or die "无法创建二进制文件: $!";
print $fh $binary_data;
八、错误处理最佳实践
使用 autodie 模块(推荐)
use autodie; # 自动处理错误,无需手动检查
open(my $fh, '<', 'file.txt'); # 失败时会自动 die
传统错误处理
open(my $fh, '<', 'file.txt')
or die "无法打开文件 'file.txt': $!";
九、实用示例
复制文件
use autodie;
open(my $src, '<', 'source.txt');
open(my $dst, '>', 'destination.txt');
while (<$src>) {
print $dst $_;
}
close($src);
close($dst);
统计文件行数
open(my $fh, '<', 'data.txt') or die $!;
my $line_count = 0;
$line_count++ while <$fh>;
print "总行数: $line_count\n";
close($fh);
日志文件追加
sub write_log {
my ($message) = @_;
my $timestamp = localtime;
open(my $fh, '>>', 'app.log') or die "无法打开日志文件: $!";
print $fh "[$timestamp] $message\n";
close($fh);
}
Perl 文件操作的关键是正确管理文件句柄和及时处理错误。现代 Perl 编程推荐使用词法文件句柄(my $fh)和 autodie模块来简化错误处理,确保代码的健壮性和可维护性。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)