Perl最佳实践
Perl最佳实践
Damian Conway
O'Reilly Taiwan公司 编译
出版时间:2008年02月
页数:504
许多程序员凭直觉来编程,这些直觉来自于他们早期养成的习惯和风格。这样写出的程序似乎自然、直观,而且看起来也很不错。但是,如果你想严肃地对待程序员这份职业,那么直觉就远远不够了。《Perl最佳实践》讲述了许多关于Perl语言的编程规则、使用惯例、开发标准和最佳实践,这些内容不仅有助于程序员之间的交流和协同工作,同时也提供了一套思考问题的可靠框架和一种表述解决方案的通用语言。

通过生动幽默的表达,作者Damian Conway为Perl编程人员提供了关于编程艺术的256条规则,这些规则能帮助你编写出更好的Perl代码。这些规则涵盖了代码布局
和命名规则,数据和控制结构的选择,程序解构和模块化,接口的设计和实现,面向对象设计,错误处理、程序测试和调试。

本书中所有的规则都是为了写出清晰、健壮、高效、可维护和简洁的程序而设计。

Conway博士并不自诩这些规则是最广泛和最清晰的实践集,但实际上,本书确实提供了在实践中被广泛认可和应用的建议,而不是象牙塔似的编程理论。

最特别的是,《Perl最佳实践》提供的规则是实在有效的,世界各地的开发人员已经普遍使用。像Perl语言的初衷一样,这些规则将使你的开发更加出色。

“作为一个大型Perl项目的开发经理,我确信我的开发团队的每个成员都会把《Perl最佳实践》放在手边,并将它作为开发准测。”

—— Randal Schwartz

“这本书的出现使开发人员不再有任何借口写出糟糕的Perl程序。读过这本书后,所有的Perl开发人员的工作都会更加高效。”

—— Peter Scott, Perl trainer and author

“《Perl最佳实践》已经帮我节省了大量的时间,同时,‘部门编码规范’的编写不再是难事。”

—— Andy Lester, Web Applications Manager, Follett Library Resources

“Damian完成的工作是难以置信的,不仅展现了如何构建大型的、可维护的Perl应用,同时,将Perl语言的强大表达力展现在我们面前。”

—— Bill Odom, Perl Foundation Steering Committee Chairman
  1. 前言
  2. 第一章 最佳实践
  3. 三个目标
  4. 改变习惯
  5. 第二章 代码部署
  6. 括号方式
  7. 关键字
  8. 子程序和变量
  9. 内置函数
  10. 键和索引
  11. 运算符
  12. 分号
  13. 逗号
  14. 代码行的长度
  15. 缩排
  16. 制表符
  17. 组块
  18. Else
  19. 垂直对齐
  20. 断开长行
  21. 非末端表达式
  22. 按优先级断开
  23. 赋值运算
  24. 三元运算符
  25. 列表
  26. 自动化部署
  27. 第三章 命名惯例
  28. 标识符
  29. 布尔值
  30. 引用变量
  31. 数组和散列
  32. 下划线
  33. 大小写
  34. 缩写
  35. 模糊的缩写
  36. 模糊的名称
  37. 实用子程序
  38. 第四章 值和表达式
  39. 字符串定界符
  40. 空字符串
  41. 单字符字符串
  42. 转义字符
  43. 常量
  44. 前导零
  45. 长数字
  46. 多行字符串
  47. Here Document
  48. Heredoc 缩排
  49. Heredoc 终止符号
  50. Heredoc 引号
  51. 未修饰字
  52. “胖逗号”
  53. 少用逗号
  54. 低优先级运算符
  55. 列表
  56. 列表成员关系
  57. 第五章 变量
  58. 词法变量
  59. 包变量
  60. 局域化
  61. 初始化
  62. 标点变量
  63. 标点变量局域化
  64. 匹配变量
  65. 美元符号-下划线
  66. 数组索引
  67. 切片
  68. 切片部署
  69. 切片分离
  70. 第六章 控制结构
  71. if块
  72. 后缀选择器
  73. 其他后缀修饰符
  74. 否定控制语句
  75. C 风格的循环
  76. 不必要的索引标示
  77. 必要的索引标示
  78. 迭代器变量
  79. 非词法的循环迭代器
  80. 列表的产生
  81. 列表的选取
  82. 列表的转换
  83. 复杂映射
  84. 列表处理的副作用
  85. 多部分选取
  86. 值的切换
  87. 表格式的三元表达式
  88. do-while 循环
  89. 线性编码
  90. 分布式控制
  91. 重做
  92. 循环标签
  93. 第七章 说明文档
  94. 说明文档的类型
  95. 样板文件(boilerplate)
  96. 扩展样板文件
  97. 地点
  98. 集中
  99. 位置
  100. 技术说明文档
  101. 注释
  102. 算法说明文档
  103. 阐明式说明文档
  104. 自卫式说明文档
  105. 指示式说明文档
  106. 推论式说明文档
  107. 校对
  108. 第八章 内置函数
  109. 排序
  110. 逆转列表
  111. 逆转标量
  112. 固定宽度的数据
  113. 分隔的数据
  114. 可变宽度的数据
  115. 字符串的求值
  116. 自动化排序
  117. 子字符串
  118. 散列的值
  119. glob
  120. 睡眠
  121. map 和 grep
  122. 实用程序
  123. 第九章 子程序
  124. 调用语法
  125. 同名异物
  126. 自变量列表
  127. 具名自变量
  128. 缺漏的自变量
  129. 默认自变量值
  130. 标量返回值
  131. 上下文返回值
  132. 多上下文返回值
  133. 原型
  134. 隐式返回
  135. 返回失败
  136. 第十章 I/O
  137. 文件句柄
  138. 间接文件句柄
  139. 文件句柄局域化
  140. 完完整整地开启
  141. 错误检查
  142. 清理
  143. 输入循环
  144. 基于行的输入
  145. 简单吃进(Simple Slurping)
  146. 强力吃进
  147. 标准输入
  148. 打印至文件句柄
  149. 简单提示
  150. 交互性
  151. 强力提示
  152. 进度指示器
  153. 进度指示器自动化
  154. 自动刷新
  155. 第十一章 引用
  156. 解引用
  157. 大括号式引用
  158. 符号引用
  159. 循环引用
  160. 第十二章 正则表达式
  161. 扩展格式
  162. 行的边界
  163. 字符串边界
  164. 字符串末尾
  165. 匹配任何东西
  166. 懒惰标记(Lazy Flag)
  167. 大括号定界符
  168. 其他定界符
  169. 元字符
  170. 具名字符
  171. 特性
  172. 空白
  173. 无约束的重复
  174. 捕获小括号
  175. 捕获的值
  176. 捕获变量
  177. 分段匹配(Piecewise Matching)
  178. 表格式正则表达式
  179. 构建正则表达式
  180. 预制的(canned)正则表达式
  181. 交替选择
  182. 分离交替选择
  183. 回溯
  184. 字符串比较
  185. 第十三章 错误处理
  186. 异常
  187. 内置函数失败
  188. 上下文失败
  189. 系统失败
  190. 可复原的失败
  191. 报告失败
  192. 错误消息
  193. 替错误编写说明文档
  194. OO异常
  195. 易变的错误消息
  196. 异常层次
  197. 处理异常
  198. 异常类
  199. 取出异常
  200. 第十四章 命令行处理
  201. 命令行结构
  202. 命令行惯例
  203. 元选项
  204. 原位自变量
  205. 命令行的处理
  206. 接口一致
  207. 应用程序间一致性
  208. 第十五章 对象
  209. 使用OO
  210. 准则
  211. 伪散列
  212. 受限散列
  213. 封装
  214. 构造函数
  215. 克隆
  216. 析构函数
  217. 方法
  218. 访问器
  219. lvalue访问器
  220. 间接对象
  221. 类接口
  222. 运算符重载
  223. 强制
  224. 第十六章 类层次
  225. 继承
  226. 对象
  227. 对象的 bless
  228. 构造函数自变量
  229. 基类初始化
  230. 构造和析构
  231. 自动化类层次
  232. 属性破坏
  233. 属性的建立
  234. 强制
  235. 累积方法
  236. 自动加载
  237. 第十七章 模块
  238. 接口
  239. 重构
  240. 版本编号
  241. 版本需求
  242. 导出
  243. 声明式导出
  244. 接口变量
  245. 创建模块
  246. 标准链接库
  247. CPAN
  248. 第十八章 测试和调试
  249. 测试案例
  250. 模块化测试
  251. 测试集
  252. 失败
  253. 要测试什么?
  254. 调试和测试
  255. 责难(stricture)
  256. 警告
  257. 正确性
  258. 覆盖责难
  259. 调试器
  260. 手动调试
  261. 半自动化调试
  262. 第十九章 其他主题
  263. 版本控制
  264. 其他语言
  265. 配置文件
  266. 格式
  267. 绑定
  268. 机巧
  269. 封装的机巧
  270. 性能测试
  271. 内存
  272. 缓存机制
  273. 备忘
  274. 缓存机制最优化
  275. 剖析
  276. 引入缺陷
  277. 附录一 Perl基本的最佳实践
  278. 附录二 Perl最佳实践
  279. 附录三 编辑器配置
  280. 附录四 推荐的模块和实用程序
  281. 附录五 参考文献
书名:Perl最佳实践
作者:Damian Conway
译者:O'Reilly Taiwan公司 编译
国内出版社:东南大学出版社
出版时间:2008年02月
页数:504
书号:978-7-5641-1009-3
原版书出版商:O'Reilly Media
Damian Conway
 
Damian Conway holds a PhD in computer science and is an honorary Associate
Professor with the School of Computer Science and Software Engineering at Monash
University, Melbourne, Australia.
Currently he runs an international IT training company—Thoughtstream—which
provides programmer development from beginner to masterclass level throughout
Europe, North America, and Australasia.
Damian was the winner of the 1998, 1999, and 2000 Larry Wall Awards for Practical
Utility.The best technical paper at the annual Perl Conference was subsequently
named in his honour.He has been a member of the technical committee for The Perl
Conference, a keynote speaker at many Open Source conferences, is a former columnist
for The Perl Journal, and is author of the book Object Oriented Perl.In 2001
Damian received the first “Perl Foundation Development Grant” and spent 20
months working on projects for the betterment of Perl.
A popular speaker and trainer, he is also the author of numerous well-known Perl
modules, including Parse::RecDescent (a sophisticated parsing tool), Class::Contract
(design-by-contract programming in Perl), Lingua::EN::Inflect (rule-based English
transformations for text generation), Class::Multimethods (multiple dispatch polymorphism),
Text::Autoformat (intelligent automatic reformatting of plaintext),
Switch (Perl’s missing case statement), NEXT (resumptive method dispatch),
Filter::Simple (Perl-based source code manipulation), Quantum::Superpositions
(auto-parallelization of serial code using a quantum mechanical metaphor), and
Lingua::Romana::Perligata (programming in Latin).
Most of Damian’s time is now spent working with Larry Wall on the design of the
new Perl 6 programming language.
 
 
本书的封面是美洲猎鹿犬(American staghound),它是灵缇犬(greyhound)和苏格兰猎鹿犬(Scottish deerhound)的混种,专门培养来狩猎。狩猎是世界上最古老的野外活动之一,而“锐目猎犬”或“视力型猎犬”早从公元116年起就已经在竞赛场上经受层层考验。

猎鹿犬并非一个品种,而是一个视力型猎犬的类型。虽然从18世纪起,已经有好几条猎鹿犬繁殖线(比某些现代品种更久),但多数猎人对品种鉴别并不积极。他们认为猎鹿犬不应该分类,而是应该作为一个狩猎动物品种,考虑的是功能,而不是形式。因此,它们没有品种标准。猎鹿犬的任何颜色或纹路不是来自于灵缇犬,就是来自于苏格兰猎鹿犬,而且它的皮毛有三种类型:粗毛、滑毛、混毛(界于粗毛和滑毛之间)。

猎鹿犬的很多生理特点都和灵缇犬相同,有长腿、强壮的肌肉、厚实的胸膛以及敏锐的视力,而且具备了苏格兰猎鹿犬的耐力和嗅闻能力。猎鹿犬的狩猎本能如此强大,因此任何会跑的东西(兔子、鹿、土狼等)都会被视为追逐的对象。因为这些狗的奔跑速度快,警觉性强,又不会过于亢奋或具侵略性,有人说,如果适当训练,它们也可以当作绝佳的宠物。