智享教程网
白蓝主题五 · 清爽阅读
首页  > 日常经验

Perl文件操作实用技巧分享

平时写脚本处理日志、配置ref="/tag/182/" style="color:#874873;font-weight:bold;">文件或者数据导出时,Perl的文件操作功能特别趁手。不像一些语言需要引入额外模块,Perl原生支持就很完整,打开、读取、写入、追加这些基本操作几行代码就能搞定。

打开和关闭文件

用open函数打开文件是最常见的起点。比如要读取一个名为data.txt的文件:

open(my $fh, '<', 'data.txt') or die "无法打开文件: $!";
while (my $line = <$fh>) {
    chomp $line;
    print "读到一行:$line\n";
}
close($fh);

这里的$fh是文件句柄,就像一个遥控器,控制你对文件的读写动作。<表示只读模式,如果文件不存在会失败,$!变量能告诉你具体出错原因。

写入和追加内容

想生成报告或者记录运行日志时,就得往文件里写东西。比如创建一个新文件report.log:

open(my $out, '>', 'report.log') or die "无法创建文件: $!";
print $out "任务开始执行\n";
print $out "处理完成,共耗时5秒\n";
close($out);

注意这里用了>,表示清空原内容并写入。如果想在已有文件末尾追加,比如记录每天的日志,就改用>>:

open(my $log, '>>', 'daily.log') or die "无法打开日志文件: $!";
print $log "[2024-04-05] 用户登录\n";
close($log);

批量修改文件内容

有次我需要把几十个配置文件里的旧IP地址替换成新的,手动改太累。写了个Perl脚本遍历目录,逐个处理:

use File::Find;

find(sub {
    return unless -f $_ && $_ =~ /.conf$/;
    open(my $in, '<', $_) or return;
    my @lines = map { s/192\.168\.1\.1/10.0.0.10/g; $_ } <$in>;
    close($in);

    open(my $out, '>', $_) or return;
    print $out @lines;
    close($out);
}, '/path/to/configs');

这段代码用File::Find模块遍历指定目录,找到以.conf结尾的文件,读入所有行,用map一边替换一边保留内容结构,再原路写回去。实际跑起来十几秒就搞定了原本半小时的活。

小贴士

操作文件时记得加上use strict;和use warnings;,能帮你避开不少低级错误。还有,处理重要文件前最好先备份,比如写入前复制一份original.bak,万一出问题还能快速恢复。

像这种日常运维中的小任务,Perl写起来比想象中简单,特别是正则搭配文件操作,处理文本类工作几乎没对手。