🎬 HoRain云小助手个人主页

 🔥 个人专栏: 《Linux 系列教程》《c语言教程

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

专栏介绍

专栏名称

专栏介绍

《C语言》

本专栏主要撰写C干货内容和编程技巧,让大家从底层了解C,把更多的知识由抽象到简单通俗易懂。

《网络协议》

本专栏主要是注重从底层来给大家一步步剖析网络协议的奥秘,一起解密网络协议在运行中协议的基本运行机制!

《docker容器精解篇》

全面深入解析 docker 容器,从基础到进阶,涵盖原理、操作、实践案例,助您精通 docker。

《linux系列》

本专栏主要撰写Linux干货内容,从基础到进阶,知识由抽象到简单通俗易懂,帮你从新手小白到扫地僧。

《python 系列》

本专栏着重撰写Python相关的干货内容与编程技巧,助力大家从底层去认识Python,将更多复杂的知识由抽象转化为简单易懂的内容。

《试题库》

本专栏主要是发布一些考试和练习题库(涵盖软考、HCIE、HRCE、CCNA等)

目录

⛳️ 推荐

专栏介绍

一、文件句柄与打开关闭

二、读取文件内容

三、写入文件内容

四、文件测试操作符

五、目录操作

六、文件重命名与删除

七、二进制文件处理

八、错误处理最佳实践

九、实用示例


img

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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐