perl 教程,别急着追新语言,先让 Perl 帮你把生活里的乱文件收拾干净

admin

,大概率看到的都是 Python、Rust、Go,Perl 像个多年没联系的老同学,突然出现在通讯录里,但我想说一句可能有点逆潮流的话:Perl 不一定是你要拿来写大型项目的第一选择,可它特别适合解决生活里那些“说大不大、说小不小、手动做又烦死人”的问题,今天这篇 perl 教程,不想一上来就甩你一堆语法表,而是从一个真实生活场景出发,让你知道 Perl 到底能帮你干什么。

先说个我自己的例子,上个月我帮家里整理照片,手机、相机、微信下载、网盘导出,全堆在一个文件夹里,文件名乱七八糟,有 IMG_20230401_123456.jpg,有 微信图片_2023...jpg,还有重复的、带空格的中文名,我一开始想手动改,改了二十多张就烦了,后来用 Perl 写了个小脚本,把文件名里的日期提取出来,统一改成 2023-04-01_001.jpg 这种格式,再把没有日期的文件移到“待整理”文件夹,整个过程不到半小时,脚本不到四十行,从那以后我就更确信:Perl 的价值不是“潮”,而是“顺手”。

先给完全没接触过 Perl 的朋友一个最小入门,Perl 的安装很简单,macOS 和 Linux 通常自带,Windows 可以装 Strawberry Perl,写一个文件 hello.pl如下:

use strict;
use warnings;
print "你好,Perl\n";

运行方式是在终端里执行:

perl hello.pl

就这两步,你已经跑起第一个 Perl 程序了,我建议新手一定加上 use strict; 和 use warnings;,它们像两个唠叨但靠谱的朋友,能帮你提前发现变量拼错、未定义值之类的小毛病。

Perl 最让我喜欢的是文本处理,比如你有一个下载文件夹,里面全是 .txt 文件,你想统计每个文件有多少行、哪些文件包含“发票”两个字,用 Perl 写起来很直接:

use strict;
use warnings;
my @files = glob("*.txt");
for my $file (@files) {
    open my $fh, '<', $file or die "打不开 $file: $!";
    my $count = 0;
    my $hit = 0;
    while (my $line = <$fh>) {
        $count++;
        $hit++ if $line =~ /发票/;
    }
    close $fh;
    print "$file: $count 行,包含发票的行数 $hit\n";
}

这段代码不长,但已经覆盖了 Perl 入门里很关键的几个点:数组、循环、文件打开、逐行读取、正则匹配,尤其是正则表达式,Perl 在这方面的表达力很强,你可以用 /发票/ 找关键词,也可以用 /新内容/g 做批量替换,很多 Perl 老用户对正则有种“手里有把趁手螺丝刀”的感情,我理解,因为它确实适合处理不规则文本。

再说一个更生活化的实例:批量重命名,假设你有一堆照片,文件名里有日期,你想把空格替换成下划线,并在前面加 trip_,核心代码可以写成:

use strict;
use warnings;
for my $file (glob("*.jpg")) {
    my $new = $file;
    $new =~ s/ /_/g;
    $new = "trip_$new";
    rename $file, $new or warn "重命名失败: $file -> $new\n";
}

真实使用前建议先打印出来预览,别一上来就 rename,我个人的习惯是加一个“试运行”开关,先看清楚要改哪些文件,再真正执行,这个习惯不只适用于 Perl,写任何自动化脚本都一样:先观察,再动手。

那 Perl 适合谁学?我的观点很明确:如果你经常和文本、日志、文件名、表格、配置文件打交道,Perl 值得你花一个周末入门,它不要求你一开始就理解复杂框架,写个几十行脚本就能解决具体问题,反过来,如果你要做一个长期维护的 Web 后端、大型团队协作项目,或者你所在团队已经有成熟技术栈,那就没必要为了“学 Perl”而硬上,工具是拿来解决问题的,不是拿来站队的。

我也得承认 Perl 的“劝退点”,它的语法符号比较多,、、 一开始容易看花眼;老代码里可能遇到一些写法比较自由的风格;新生态不像 Python 那么热闹,所以我的建议是:别把 Perl 当成万能答案,把它当成文本处理和多任务自动化的备选工具,先学四件事:标量变量、数组和哈希、文件读写、正则替换,这四件事学完,你就能写出很多实用小脚本。

如果你今天就想开始,我建议你给自己定一个小目标:找出电脑里最乱的一个文件夹,用 Perl 统计文件数量、按扩展名分类、或者批量改一次文件名,不要从“我要精通 Perl”开始,而要从“我今天要少手动点鼠标”开始,学习编程最怕空转,最有效的正反馈往往来自一个小脚本真的帮你省了十分钟。

最后说句个人观点:Perl 可能不是最闪亮的那门语言,但它像家里工具箱里那把旧钳子,平时不显眼,真遇到拧螺丝、剪铁丝的时候,你会庆幸它在,对普通人和内容创作者来说,学一点 Perl,不是为了炫耀技术,而是为了把重复劳动交出去,把时间留给更值得做的事,要是你愿意,下一篇我可以继续写一个“Perl 批量整理下载文件夹”的完整实战教程,咱们不光看语法,直接做一个能跑起来的小工具。

目录[+]