《高阶Perl》——导读

简介:


image

前  言

在编程圈子里有一句著名的俗语,一个优秀的Fortran程序员可以用任何语言写Fortran程序。然而,让人悲哀的是,不管他们是否愿意,Fortran程序员用任何语言写Fortran程序。类似地,作为Perl程序员,我们也在用Perl写C程序,不管我们是否愿意。这让人羞愧,因为Perl是一门比C更富有表现力的语言。我们本可以做得更好,以C程序员梦想不到的方式使用Perl,但是我们没有那样做。

怎么会这样呢?Perl的设计初衷是一方面作为C的替代品,另一方面作为UNIX脚本语言(如Bourne Shell和awk)的替代品。Perl最初的主要拥护者是UNIX系统管理员,他们熟悉C和UNIX脚本语言,因此自然地倾向把Perl程序写成类似于C和awk的程序。Perl的发明人(Larry Wall)来自这个系统管理员社区,还有Randal Schwartz,与Perl合著了《Programming Perl》,本书是第一本也仍然是最重要的一本Perl参考著作。其他重要的早期贡献者还包括Tom Christiansen,也是古董级C与Unix专家。即使Perl程序员不是来自Unix系统管理员社区,他们也被其中的人或者其中的人训练的人训练成那样。

大约在1993年我开始阅读关于Lisp 的书,我有一个重要的发现:Perl更像Lisp而不是C。如果你拿起一本优秀的Lisp书,其中会有一段文字描述Lisp的优秀特点。例如,《Paradigms of Artificial Intelligence Programming》,作者Peter Norvig,有一节标题是“是什么让Lisp与众不同”,其中就描述了Lisp的七个特点。Perl分享了其中六个,C一个也没有分享。这些是巨大的、重要的特点,如头等函数、符号表的动态访问以及自动存储管理。Lisp程序员自1957年以来就在使用这些特点。他们知道如何高效使用这些语言特点的许多方法。如果Perl程序员能发现这些Lisp程序员已经知道的事情,那么他们将学到许多使Perl编程工作更轻松的方法。

说比做容易。几乎没有人愿意听Lisp程序员的。Perl人对Lisp心存芥蒂,就像Larry Wall 的著名评论所表明的,Lisp与混合了剪下的指甲碎屑的燕麦看起来一样。Lisp程序员经常制造像“cons”与“cooder”的滑稽噪声,他们还讨论像PC loser-ing问题的东西。他们相信Lisp比其他语言更好,他们也是这么说的,这让人不快。但是现在一切都好了,因为现在你不必听Lisp人的了。你可以听我的。我将制造一些轻缓的关于散列和存储以及glob的噪声,并讨论流行的和令人鼓舞的软引用与变量销毁问题。与其告诉你Lisp有多么好,不如告诉你Perl有多么好,到最后你将不会对Lisp有任何认识,但是对Perl知道得将会更多。

然后你可以停止用Perl写C程序了。我认为你将发现这是一个很好的改变。Perl就是Perl的样子,比一个慢版本的C好得多。当你写Perl程序而不是C程序时,你将惊喜于所能够做到的。

目  录

[第1章 递归与回调
1.1 十进制到二进制的转换](https://yq.aliyun.com/articles/174296/)
1.2 阶乘
1.2.1 为什么私有变量是重要的
1.3 汉诺塔
1.4 层次化数据
1.5 目录遍历的应用和变化
1.6 函数式编程与面向对象式编程
1.7 HTML
1.7.1 更灵活的选择
1.8 当递归膨胀时
1.8.1 Fibonacci数
1.8.2 划分
[第2章 分配表
2.1 配置文件处理](https://yq.aliyun.com/articles/174425/)
2.1.1 表驱动配置
2.1.2 分配表的优势
2.1.3 分配表策略
2.1.4 默认行为
2.2 计算器
2.2.1 再访HTML处理
第3章 缓存与记忆术
3.1 缓存修正递归
3.2 内联缓存
3.2.1 静态变量
3.3 好主意
3.4 记忆术
3.5 MEMOIZE模块
3.5.1 作用域和有效期
3.5.2 词法闭包
3.5.3 再谈记忆术
3.6 CAVEATS
3.6.1 返回值不依赖参数的函数
3.6.2 有边界效应的函数
3.6.3 返回引用的函数
3.6.4 带记忆的时钟
3.6.5 非常快的函数
3.7 键的生成
3.7.1 用户提供的键生成器的更多应用
3.7.2 内联的参数归一化的缓存管理
3.7.3 带有引用参数的函数
3.7.4 划分
3.7.5 为非纯函数定制的键生成
3.8 对象方法里的缓存
3.8.1 对象方法的记忆术
3.9 持续的缓存
3.10 可供选择的记忆术
3.11 传播福音
3.12 速度的好处
3.12.1 剖析和性能分析
3.12.2 自动剖析
3.12.3 钩子

相关文章
|
传感器 监控 数据挖掘
基于STM32的智能停车场导航系统设计与实现
基于STM32的智能停车场导航系统设计与实现
575 0
|
定位技术 API 开发工具
iOS测试技巧:GPX文件修改经纬度(com.apple.dt.simulatelocation)
iOS测试技巧:GPX文件修改经纬度(com.apple.dt.simulatelocation)
2708 0
iOS测试技巧:GPX文件修改经纬度(com.apple.dt.simulatelocation)
|
7月前
|
NoSQL 算法 Java
【分布式】分布式核心组件——分布式锁:Redis/ZooKeeper/etcd 实现方案(附全方位对比表)、优缺点、Redlock、时钟回拨问题
本文系统解析分布式锁原理与实践,涵盖Redis/ZooKeeper/etcd三大方案、Redlock算法、时钟回拨等核心议题,兼具深度、广度与落地性,助你构建高可用、强一致的分布式并发控制能力。
1183 4
|
4月前
|
人工智能 自然语言处理 小程序
怎么开发自己的小程序?2026 三种主流方式实测对比
2026年,AI全栈开发平台让“零代码做可上线微信小程序”成为现实:自然语言描述需求→AI自动生成完整代码→1小时内提审。成本低至几十元/月,无需编程,3步完成从想法到上线。
1470 0
|
5月前
|
人工智能 Shell C++
Claude Code Loop 快速入门:从一行命令到自动迭代
JeecgBoot AI专题研究 Claude Code 自动迭代 Loop 模式从零上手实战指南![Claude Code Loop 快速入门封面——AI自动迭代循环示意图](https://oscimg.oschina.net/oscnet/up5f894f1c4de391c13822180
386 0
Claude Code Loop 快速入门:从一行命令到自动迭代
|
机器学习/深度学习 Web App开发 人工智能
Colaboratory:手把手教你使用Google免费的云端IDE进行深度学习(免费的GPU加速)的详细攻略
Colaboratory:手把手教你使用Google免费的云端IDE进行深度学习(免费的GPU加速)的详细攻略
Colaboratory:手把手教你使用Google免费的云端IDE进行深度学习(免费的GPU加速)的详细攻略
|
9月前
|
人工智能 自然语言处理 搜索推荐
2026年企业级智能客服系统建设方案(2月最新)
瓴羊Quick Service是阿里生态孵化的企业级AI客服方案,融合通义千问大模型,具备深度语义理解、动态知识图谱、情感识别、全渠道协同、对话式BI及低代码部署能力,助力中大型企业7天快速上线、越用越智能。(239字)
|
人工智能 监控 JavaScript
Playwright初学指南 (3):深入解析交互操作
本文深度解析Playwright如何通过智能等待、自动重试等机制解决Web自动化中60%的交互失败问题。从基础点击/输入到高级拖拽/iframe操作,提供企业级解决方案和性能优化技巧,帮助开发者实现98%的操作成功率,打造稳定高效的自动化测试体系。
|
10月前
|
机器学习/深度学习 人工智能 自然语言处理
复旦大学×阿里云产学合作协同育人合作案例
复旦大学联合阿里云开展“天池AI案例100开发”项目,赵卫东团队依托产业级平台构建“理论-实训-实战”教学新体系,开发4大综合性AI案例,覆盖图像识别、自然语言处理等方向。通过MOOC、教材、师资培训多渠道辐射全国,累计惠及超13万学习者,形成可复制的产教融合示范范式,推动人工智能人才培养与产业需求无缝对接。(238字)
769 5