《高阶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 钩子

相关文章
|
机器学习/深度学习 人工智能 大数据
|
机器学习/深度学习 数据采集 算法
利用未标记数据的半监督学习在模型训练中的效果评估
本文将介绍三种适用于不同类型数据和任务的半监督学习方法。我们还将在一个实际数据集上评估这些方法的性能,并与仅使用标记数据的基准进行比较。
1002 8
|
监控 自动驾驶 5G
|
小程序 JavaScript Java
实验室预约|实验室预约小程序|基于微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)
实验室预约|实验室预约小程序|基于微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)
366 0
|
安全 Shell Linux
LabVIEW中写入或读取文件时出现error 8
LabVIEW中写入或读取文件时出现error 8
450 0
|
存储 KVM 虚拟化
倚天虚拟化:虚拟机热迁移特性介绍
热迁移分为热迁移和冷迁移,冷迁移过程中有一段明显的时间VM的服务不可用,而热迁移的服务的服务暂停时间非常短。热迁移过程中无需关闭或者长时间暂停VM,VM保持正常运行,只有在热迁移临近结束时有一个非常短暂的停机切换时间。热迁移可保证了VM服务的可用性,提升业务的连续性和用户体验。
2943 1
|
Oracle Java 关系型数据库
CentOS 7 - 安装Oracle JDK8
我们要在CentOS安装最新版本的JDK8,需要首先将JDK下载到服务器,然后通过操作系统自带的工具yum进行安装。 本文我们将介绍CentOS 7下JDK8的安装。
4340 0
|
算法 前端开发 BI
磁贴布局在钉钉宜搭报表设计引擎中的实现
先来看看报表磁贴布局改造完成的大致效果~
1822 0
磁贴布局在钉钉宜搭报表设计引擎中的实现
|
Python
Python3,5行代码,制作Gif动图,太简单了。
Python3,5行代码,制作Gif动图,太简单了。
45425 2