加载失败
Perl 在 1990s–2000s 是脚本与 CGI 网页的主力,緣於它与 UNIX 工具链(sed/awk/grep)相连及早期包仓 CPAN 的普及。后来 Rails、mod_php、Python 等以更低部署成本或更友好的开发者体验吸引了大量新手与企业,语言设计(sigils、context、引用、老旧 OO)与社区文化(RTFM、one-liner 炫技)在评论中被反复讨论。另一个重要事件是 Perl6/Raku 的长期重构承诺——评论认为这既是技术决策也是社区分裂的催化剂,三者(技术、生态、文化)共同塑造了 Perl 的历史路径。
大量评论把 Perl 的衰落部分归因于社区氛围:盛行的 "wizards/monks" 文化、RTFM 式的冷漠回答以及以 one-liner/代码 golf 炫技为荣的风气让许多新手感到被排斥。评论中有具体回忆(IRC/Usenet/邮件列表)里对新人的嘲讽或一言以蔽之的回应,导致新人更倾向于转向更友好的社区如 Python 或 Ruby。尽管也有正面例子(有人讲述被“巫师”带入并获悉遇帮助的经历),但整体评价是这种文化提高了入门门槛并扩大了人才流失,从而放大了 Perl 在行业中的边缘化。
许多评论聚焦于 Perl 的语言特性带来的长期维护成本:大量 sigils($, @, %)、标量/列表的上下文敏感行为、隐式变量(如 $_)以及复杂的引用语法常使代码对新读者不可见或容易出错。实例包括 @array 在不同上下文下返回长度或数组、副作用式的一行表达式、以及早期加入的“bolted-on”对象系统和参数传递(@_、shift 出 self)导致的混乱。评论者把这些归结为“write-once/read-never”或“技术债”,指出短期高效的表达力反而妨碍团队协作和长期维护。
不少评论指出,Rails、mod_php 和 Python 等在部署便利性与框架体验上击中大量用户痛点:Rails 把开发体验做成“愉悦”的产品,PHP(尤其 mod_php)在共享主机时代的低摩擦部署快速普及,Python 则借助教育和大公司(如 Google)的采用形成网络效应。评论里还提到 CPAN 的早期领先地位,但有人抱怨某些 CPAN 包质量参差不齐,相比之下 Python 的第三方生态(PyPI、Django、NumPy)吸引了更多长期投入。实际差异还包括 mod_perl 需要额外安装,而 mod_php 常被预装,从而直接影响了新项目的选型。
多条评论把 Perl 的人气衰退与 Perl6(后更名 Raku)的长期、非向后兼容性重构联系起来:核心团队把精力放在一个多年无稳定实现的大改造上,社区因此等待、分裂或转向其它语言。评论者指出这种“等新语言”的策略实际上耗散了贡献者和动量,使 Perl5 在生态演进上停滞,许多人认为这比单纯的文化问题更具破坏性。有人把这件事与 Python 2→3 的痛苦对比,认为错误的迁移策略会加速生态萎缩。
另一类评论为 Perl 辩护,强调其在文本处理、管道/一行脚本(one-liner)和传统 Unix/legacy 环境中的持续实用性。评论列举了 CPAN 的老牌模块、构建工具(autotools、openssl)对 Perl 的依赖,以及系统自带 perl 使脚本长期可运行的兼容优势。部分声音认为流行度下降反而让 Perl 保持向后兼容与稳定性,对系统运维和长期维护脚本来说这是重要资产——换言之,衰落并不等于彻底失败,而是角色定位的收敛。
CPAN: Comprehensive Perl Archive Network,Perl 的第三方模块仓库/包管理生态,早期为语言普及与代码复用提供关键支持。
TIMTOWTDI: Perl 的经典格言(There Is More Than One Way To Do It),强调多种实现路径而非单一约定,既是表达力来源也带来风格碎片化风险。
sigils($, @, %): Perl 中的变量前缀符号,用来区分标量($)、数组(@)与哈希(%)等,影响语法与取值,初学者常因此困惑。
scalar/list context: Perl 的上下文敏感性:表达式在 scalar(标量)或 list(列表)上下文下会返回不同结果(例如 @array 在标量上下文返回长度),是常见语义陷阱。
mod_perl / mod_php: Apache 模块:mod_perl 把 Perl 嵌入 Apache 提升 CGI 性能,mod_php 将 PHP 内嵌于服务器以降低部署摩擦,两者影响了 Web 时代语言的采用。
Raku(Perl 6): 原名 Perl 6 的重设计项目,后更名为 Raku;其长期开发与非向后兼容承诺被评论者认为分散了 Perl 社区注意力并加速了衰退。