设为首页 收藏本站
查看: 1113|回复: 0

[经验分享] 精通Perl(第2版)

[复制链接]

尚未签到

发表于 2015-12-26 16:35:01 | 显示全部楼层 |阅读模式
  精通Perl(第2版)(通往Perl大师之路必读经典书籍,体现了一种编程思维,能够帮你解决很多实际的问题
  【美】brian d foy(布瑞恩·D·福瓦)著   
  王兴宇 刘宸宇 译
  ISBN 978-7-121-25419-2
  2015年3月出版
  定价:89.00元
  424
  16
编辑推荐

- 探索高级的正则表达式功能

- 如何避免程序的常见安全问题

- 对 Perl 程序的性能分析和基准测试可以让你发现改进之处

- 清理 Perl 代码,使之更加直观和易读

- 了解 Perl 如何持续跟踪软件包内的变量

- 动态定义子程序

- 不必改动原有代码即可提升模块

- 使用位操作和位向量更有效地存储更大的数据

- 学习如何检测 Perl 中未报告的错误

- 深入学习日志、数据持久化和绑定变量的魔法

内容提要

  《精通Perl(第2版)》作者brian d foy 用他生动的第一人称视角向各位读者介绍了精彩的Perl 高级语言知识以及丰富的实战工具与实用技巧。《精通Perl(第2版)》各章的内容相对独立,您完全可以根据自己的兴趣或需要直达你所需要的章节。
  《精通Perl(第2版)》的读者主要面对具有较多经验的Perl 编程人员。阅读本书前,建议阅读本书的姊妹篇《Perl 语言入门》和《Perl 进阶》。作者在这本书里针对调试、优化、错误和日志等方面均有深入解析,也揭示了Perl 中如绑定变量、持久化存储等各种魔法般的特性和功能的实现细节和用途。书中还对如何开发、调试自己的模块,以及如何做出更适合使用的模块做了详细介绍。
  总之,本书可以作为读者在向Perl 高手进阶过程中的一个助力器,希望读者能在阅读过程中深入思考,加入自己的理解,用Perl 来完成一件件神奇的事情。
目录

  前言  vii
  第1章  高级正则表达式  1
  可读的正则表达式/x 和(?#...) 1
  全局匹配3
  全局匹配锚定5
  递归正则表达式7
  重复子模式7
  前后查找19
  向前查找断言(?=PATTERN) 与(?!PATTERN) 19
  向后查找断言(?<!PATTERN) 与(?<=PATTERN) 23
  调试正则表达式26
  参数-D 26
  总结31
  延伸阅读31
  第2章  安全编程技术 33
  不良数据会毁了你的生活33
  污点检测34
  用警告代替致命错误36
  自动污点检测模式37
  mod_perl 37
  污点数据37
  污点检测的副作用39
  清除数据污点40
  IO::Handle::untaint 42
  哈希表关键字42
  Taint::Util 43
  用污点数据选择无污点数据44
  符号引用44
  DBI 防御性数据库编程47
  system 和exec 命令的列表形式50
  三个参数的open 函数51
  sysopen 51
  限制特殊权限52
  Safe 隔间52
  Safe 模块的局限性59
  娱乐一下59
  总结61
  延伸阅读61
  第3章  Perl 调试器 63
  避免浪费太多的时间63
  世界上最好的调试器64
  安全地修改模块65
  封装子程序66
  Perl 调试器69
  备选调试器70
  用-d 启用其他调试器70
  Devel::ptkdb 70
  Devel::ebug 72
  Devel::hdb 73
  集成开发环境调试器73
  EPIC 74
  Komodo 74
  总结74
  延伸阅读75
  第4章  Perl性能分析 77
  找出罪魁祸首77
  通用方法81
  DBI 性能分析83
  其他DBI::Profile 报告87
  懒惰是美德,能否简单点89
  切换为数据库89
  Devel::NYTProf 模块92
  写一个自己的分析器92
  Devel::LineCounter 模块92
  性能分析测试套件93
  Devel::Cover 模块94
  总结96
  延伸阅读96
  第5章  Perl基准测试 97
  基准测试理论97
  测量时间98
  比较代码102
  不要停止思考105
  隔离环境109
  处理异常值112
  内存使用113
  perlbench 工具119
  总结120
  延伸阅读121
  第6章  清理Perl程序123
  好的风格123
  perltidy 程序124
  去除混淆126
  对隐藏代码的解码126
  用B::Deparse 对代码进行逆向解析129
  Perl::Critic 模块131
  创建我们自己的Perl::Critic 策略135
  总结136
  延伸阅读136
  第7章  符号表和Typeglob 137
  软件包变量和词法变量137
  获取软件包变量139
  符号表141
  Typeglob 143
  别名146
  旧代码中的文件句柄参数148
  给匿名子程序命名149
  简单的方法151
  总结152
  延伸阅读152
  第8章  动态子程序 153
  子程序作为数据153
  创建与替换命名子程序157
  符号引用159
  遍历子程序列表161
  处理流水线163
  自引用匿名子程序164
  方法列表165
  子程序作为参数使用165
  自动加载方法170
  哈希表作为对象171
  自动切分172
  总结173
  延伸阅读173
  第9章  修改和提升模块175
  选择正确的解决方案175
  给作者发送补丁175
  本地修补177
  接管一个模块177
  分支177
  从头开始做自己的模块178
  替换模块的一部分178
  派生子类181
  一个ExtUtils::MakeMaker 的例子184
  其他例子186
  封装子程序186
  总结188
  延伸阅读188
  第10章  配置Perl程序191
  不要做的事191
  将配置代码放到独立的文件中193
  更好的办法194
  环境变量194
  特殊环境变量195
  打开额外的输出195
  命令行选项197
  Perl 的-s 选项198
  Getopt 模块199
  配置文件204
  ConfigReader::Simple 204
  Config::IniFiles 205
  Config::Scoped 206
  其他配置文件206
  具有不同名字的脚本207
  交互和非交互程序207
  Perl 的配置模块209
  不同的操作系统209
  总结211
  延伸阅读211
  第11章  检测和报告错误 213
  Perl 错误处理基础213
  操作系统错误214
  子进程错误216
  操作系统特定的错误218
  报告模块错误219
  分解问题220
  异常222
  eval 222
  多层嵌套的die 223
  在die 中使用引用225
  用die 传递对象226
  打破$@ 229
  autodie 231
  报告罪魁祸首233
  捕获异常237
  Try::Tiny 237
  TryCatch 239
  多态返回值240
  总结241
  延伸阅读241
  第12章  日志 243
  记录错误和其他信息243
  Log4perl 244
  子程序参数246
  配置Log4perl 247
  持久化日志配置251
  日志分类251
  其他的Log::Log4perl 功能254
  总结255
  延伸阅读255
  第13章  数据持久化257
  Perl 特有的格式257
  打包257
  定长记录259
  展开二进制格式259
  Data::Dumper 260
  类似的模块264
  Storable 模块266
  冻结数据268
  Storable 模块的安全问题270
  Sereal 模块273
  DBM 文件278
  dbmopen 函数278
  DBM::Deep 模块278
  Perl 所不认识的格式280
  JSON 格式280
  YAML 格式282
  MessagePack 格式285
  总结286
  延伸阅读286
  第14章  使用Pod289
  Pod 格式289
  Pod 指令289
  编码291
  正文元素291
  转换Pod 292
  Pod 转换程序292
  Pod::Perldoc::ToToc 模块294
  Pod::Simple 模块295
  从Pod::Simple 派生子类298
  Web 服务器中的Pod 299
  测试Pod 299
  检查Pod 299
  Pod 覆盖率300
  隐藏和忽略函数的Pod 覆盖率检查301
  总结302
  延伸阅读302
  第15章  位操作305
  二进制数305
  以二进制数方式输出306
  位操作符307
  一元取反操作符(~) 308
  按位与操作(&) 310
  按位或操作(|) 311
  按位异或操作(ˆ) 312
  左移位(<<)和右移位(>> )操作符314
  位向量314
  vec 函数316
  位字符串的存储318
  存储DNA 321
  素数判定322
  记录事情323
  总结324
  延伸阅读324
  第16章  绑定变量的魔法 327
  看起来普通的变量327
  在用户层面328
  帷幕之后329
  标量330
  Tie::Cycle 模块330
  有界整数333
  自毁值334
  数组335
  重新创建数组336
  一些现实中的东西340
  哈希表345
  文件句柄347
  总结349
  延伸阅读350
  第17章  模块即程序351
  main 入口351
  回到过去352
  谁在调用352
  测试程序353
  模块即测试354
  创建程序发布包359
  给程序里加内容362
  发布程序366
  总结367
  延伸阅读367
  附录A 延伸阅读369
  Perl 书籍369
  非Perl 书籍371
  附录B brian 的Perl 问题解决指导手册  373
  解决问题的哲学373
  我的方法374
  那些我做过和仍在做的蠢事378
  本书模块索引381
  索引385
  
精彩节摘

  译者序
  ——献给逝去的和新生的纪念
  作为译者,总是有一些特权,比如说,可以在翻译的书前面,用铅字写一些自己想说的话。当然,作为读者,您可能不喜欢,不过,请您谅解我们激动的心情,愿意的话,您可以看看我们的吐槽。
  我的父亲是一个传统的老知识分子,虽然我自己并不成器,但是他一直告诉我,要我写一些东西出来,留一些文字,因此能出版一些自己的文字一直是我心里长久的梦想。不过,我在各种方面的积淀还远远不够,所以直到现在也没有足以称道的文字可以出版。
  在一个偶然的机会,我得到了付睿老师的委托,和刘宸宇一同接下了这本《精通Perl》的翻译工作。虽然翻译工作和出版自己的文字还不同,但是我想这也是我给去世的父亲的一点纪念吧。
  Perl 我用了有十多年了吧,这门语言基本上算是我从事互联网行业以来第一门真正掌握和熟悉的语言了。最初是从一本薄薄的《Perl语言入门》,大约花了一周入门的。当时正值第一波的互联网热潮,工作方面使用Perl甚多,也陆续看过Perl方面的各种书籍,但是从来没有想到自己会有机会翻译一本Perl方面的书,更别说是这本经典Perl三部曲之一的《精通Perl》。
  虽然现在Perl用的比较少了,但是今年Larry Wall先生来华访问时,还是专门去朝觐了一番。然后不久,就接到了付睿老师的委托,可谓有缘。
  我平时的工作比较忙,而且也组织运作着一个翻译组:LCTT(Linux中国翻译组- http://lctt.github.io/),业余时间都占满了,所以当时对是否要接下翻译工作有些犹豫。我和LCTT的核心成员之一刘宸宇(tinyeyeser)商量了一番,感觉这个事情还是很有意义的,所以我们两个共同接下了对这本书的翻译工作。
  王兴宇
  
  我要把这本书献给我刚出生的小天使,翻译完交稿不到10天,她便降临到我的世界里,成为了我生活中不可缺少的一部分。
  一直以来,我喜欢翻译对话、评论、调侃性质的技术博客等文章,钟情于感受那种面对面交流的感觉;而技术书籍这种相对较为正式的翻译,对于我来说,反而是件痛苦的事,哪怕只翻译半本(前言、附录及前8章)。但是当我真正深入本书,与brian d foy 正面交锋时,我发现,这不正是我所熟悉的面对面的对话吗?是的!不同于一般的技术书籍,大师的行文,几乎所有的主观句子都是以第一人称“I”开头,这就好像他坐在你面前,手把手讲授一样,生动、客观、幽默、立体!因此,我和王兴宇(wxy)在翻译的时候,把大部分“I”翻译成了“我们”,这样既忠于作者的语境,也更贴合中国课堂上老师的讲课习惯。
  冯德伦的电影《太极》里有一句词:“人这一辈子,干好一件事就足够了”。我自认为不是一个有长性的人,一件事情很难坚持做到最好,总是觉得60分及格就可以了。因此,翻译过程中一度出现了厌烦情绪,但我很高兴自己成功坚持了下来。我要感谢几个月来,整个翻译过程中一直陪伴我督促我的媳妇儿,她怀着身孕,每当我消沉的时候,都会在我耳边给予
  我支持和鼓励,“翻译完了吗?翻译完了吗?赶紧翻译啊!好好翻译啊!”每个成功男人的背后,都有一个伟(lao)大(dao)的女人。我爱这个唠叨的女人!
  刘宸宇
  Perl 作为老牌的编程语言,其成熟度和应用广泛令人称道,也是系统管理员和科研工作所必备的技能之一,因此,我们希望这本书的再版翻译,能够帮助读者进一步掌握Perl 语言的应用,也希望能够为开源社区反哺更多的智慧。
  将来,如果有机会,我们也希望这本书能够以某种开源方式,分享给社区,并接受社区的不断反馈和完善,成为一本真正有生命力的书籍。
  一本书的出版,其实要感谢很多人,虽然俗套,但是我们觉得依然有必要,占用一点小小的空间感谢他们:
  感谢我们的家人的支持。
  感谢我们的同事和领导的支持。
  感谢编辑付睿老师的信任和委托。
  感谢编辑李利健老师的辛勤审校。
  感谢所有不知名的工作人员的辛勤工作。
  王兴宇&刘宸宇
  
作者简介

  brian d foy是一名多产的 Perl 培训讲师和作家,其出版的 The Perl Review 帮助人们通过教育、咨询、代码审查等方面来学习和使用 Perl。
前言

  译者序
  ——献给逝去的和新生的纪念
  作为译者,总是有一些特权,比如说,可以在翻译的书前面,用铅字写一些自己想说的话。当然,作为读者,您可能不喜欢,不过,请您谅解我们激动的心情,愿意的话,您可以看看我们的吐槽。
  我的父亲是一个传统的老知识分子,虽然我自己并不成器,但是他一直告诉我,要我写一些东西出来,留一些文字,因此能出版一些自己的文字一直是我心里长久的梦想。不过,我在各种方面的积淀还远远不够,所以直到现在也没有足以称道的文字可以出版。
  在一个偶然的机会,我得到了付睿老师的委托,和刘宸宇一同接下了这本《精通Perl》的翻译工作。虽然翻译工作和出版自己的文字还不同,但是我想这也是我给去世的父亲的一点纪念吧。
  Perl 我用了有十多年了吧,这门语言基本上算是我从事互联网行业以来第一门真正掌握和熟悉的语言了。最初是从一本薄薄的《Perl语言入门》,大约花了一周入门的。当时正值第一波的互联网热潮,工作方面使用Perl甚多,也陆续看过Perl方面的各种书籍,但是从来没有想到自己会有机会翻译一本Perl方面的书,更别说是这本经典Perl三部曲之一的《精通Perl》。
  虽然现在Perl用的比较少了,但是今年Larry Wall先生来华访问时,还是专门去朝觐了一番。然后不久,就接到了付睿老师的委托,可谓有缘。
  我平时的工作比较忙,而且也组织运作着一个翻译组:LCTT(Linux中国翻译组- http://lctt.github.io/),业余时间都占满了,所以当时对是否要接下翻译工作有些犹豫。我和LCTT的核心成员之一刘宸宇(tinyeyeser)商量了一番,感觉这个事情还是很有意义的,所以我们两个共同接下了对这本书的翻译工作。
  王兴宇
  
  我要把这本书献给我刚出生的小天使,翻译完交稿不到10天,她便降临到我的世界里,成为了我生活中不可缺少的一部分。
  一直以来,我喜欢翻译对话、评论、调侃性质的技术博客等文章,钟情于感受那种面对面交流的感觉;而技术书籍这种相对较为正式的翻译,对于我来说,反而是件痛苦的事,哪怕只翻译半本(前言、附录及前8章)。但是当我真正深入本书,与brian d foy 正面交锋时,我发现,这不正是我所熟悉的面对面的对话吗?是的!不同于一般的技术书籍,大师的行文,几乎所有的主观句子都是以第一人称“I”开头,这就好像他坐在你面前,手把手讲授一样,生动、客观、幽默、立体!因此,我和王兴宇(wxy)在翻译的时候,把大部分“I”翻译成了“我们”,这样既忠于作者的语境,也更贴合中国课堂上老师的讲课习惯。
  冯德伦的电影《太极》里有一句词:“人这一辈子,干好一件事就足够了”。我自认为不是一个有长性的人,一件事情很难坚持做到最好,总是觉得60分及格就可以了。因此,翻译过程中一度出现了厌烦情绪,但我很高兴自己成功坚持了下来。我要感谢几个月来,整个翻译过程中一直陪伴我督促我的媳妇儿,她怀着身孕,每当我消沉的时候,都会在我耳边给予
  我支持和鼓励,“翻译完了吗?翻译完了吗?赶紧翻译啊!好好翻译啊!”每个成功男人的背后,都有一个伟(lao)大(dao)的女人。我爱这个唠叨的女人!
  刘宸宇
  Perl 作为老牌的编程语言,其成熟度和应用广泛令人称道,也是系统管理员和科研工作所必备的技能之一,因此,我们希望这本书的再版翻译,能够帮助读者进一步掌握Perl 语言的应用,也希望能够为开源社区反哺更多的智慧。
  将来,如果有机会,我们也希望这本书能够以某种开源方式,分享给社区,并接受社区的不断反馈和完善,成为一本真正有生命力的书籍。
  一本书的出版,其实要感谢很多人,虽然俗套,但是我们觉得依然有必要,占用一点小小的空间感谢他们:
  感谢我们的家人的支持。
  感谢我们的同事和领导的支持。
  感谢编辑付睿老师的信任和委托。
  感谢编辑李利健老师的辛勤审校。
  感谢所有不知名的工作人员的辛勤工作。
  王兴宇&刘宸宇
  
  
  前言
  
  Mastering Perl(《精通Perl》)是本系列的第三本书。第一本书《Perl 语言入门》向读者介绍了Perl 语法的基础部分;第二本书《Perl 进阶》介绍了如何创建可重用的Perl 软件;本系列的第三本书,也就是本书,将所有的相关知识进行整合,为读者展示如何更加自如地运用Perl。
  本书并非所谓的小窍门合集,它体现的是关于Perl 语言编程的一种思考方式,也体现在你可能会遇到的包括调试、维护、配置等实际问题中,还体现在你作为一名职业程序员的现实生活中。本书要带给你的不仅仅是发现问题之术,而是为你开启属于你的掌控答案之道。
  成为一名大师
  仅有本书并不能使你成为一名Perl 大师,要想成为大师,你需要依靠自己,经过大量的Perl编程实践,尝试大量的新鲜事物,同时犯下大量的错误。我将帮助你的是带你走上正确的道路,但是,成就大师之路注定是一条独立的自主之路。作为一名Perl 大师,除了能回答他人的问题,还要能够找到自己问题的解答。
  在同业公会的黄金年代,工匠们在掌握一门手艺成为大师的过程中,实际上都遵循着一条特定的道路。他们从学徒工开始做起,不断重复枯燥的低微工作,直到他们掌握足够的技巧,成为更加值得信任的熟练工(journeymen)。熟练工肩负更多的责任,但仍需在公认的大师级工匠手下工作。当学到足够的手艺后,熟练工必须生产一件“大师级作品”来证明他的技巧。如果其他大师承认了这件作品具有大师级水准,这名熟练工才能成为一名公认的工匠大师。
  熟练工和工匠大师们也会四处游历,向其他大师学习新的技术和技巧(尽管有争议,但这可能是熟练工的单词中一部分是“journey——旅行”的由来)。也许是对秘密技艺或不同的方法故意有所保留,每一位工匠大师都掌握着一些其他人所没有掌握的东西。熟练工的部分训练内容就是向不同的大师学习。
  与其他工匠大师和熟练工的交流不断延续着工匠大师们的学习过程。工匠大师们将从其他大师那里学来的经验传授给熟练工,在这个过程中,熟练工也会把自己从另一些工匠大师那里学来的技巧带回给这名大师。真正的大师从不停止学习。
  学徒工遵循的道路影响着他所学习的内容。一个师从多位大师的学徒工可以接触更多的授业途径以及视角,所有这些他都可以融合成为自己的技艺方法。某一位大师身上看似古怪的东西,通过另一位大师的不同视角更新或重新定义,也许会给这名学徒工带来另一种平衡的观点。另外,如果这名学徒工想要学习成为一名木匠或者泥瓦匠,不同的师父会根据不同的目标来传授技艺,这就给了这名学徒工一个机会来学习不同的程序和方法。
  不幸的是,程序员并不处在这样的公会系统中。大部分Perl 程序员都是自学Perl (作为一名Perl 讲师,我对此很郁闷),自己编程,从来未曾得到过良师益友的帮助。我也是这么过来的。我买来第1 版的《Perl 语言入门》自学完以后,尽管当时Perl 已经比较常见,但我仍然是周围人中唯一听说过Perl 的人。之后不久,我发现了comp.lang.perl.misc,并且开始在上面回答一些我力所能及的问题。这就像是我给自己留的家庭作业。我的技术不断进步,社区的反馈尽管有好有坏,但都非常及时迅速,我学到了更多Perl 以外的东西。最后,我找到了一个可以整日用Perl 编程的工作,但我仍然是公司里唯一使用Perl 的人。这期间,我一直在comp.lang.perl.misc 上做着我的家庭作业。
  偶然间,我得到了Randal Schwartz 的注意,他将我招至麾下,开启了我的Perl 学徒之路。他邀请我参与Stonehenge Consulting Services 项目,我成为了一名Perl 讲师,于是,我真正的Perl 讲授工作开始了。讲授意味着把自己掌握的东西解释给别人,对于讲的人来说,这是学习一门课程的最好方法。一段时间之后,我开始了关于Perl 的写作,这与讲课是类似的,不同的是,写作需要规范的语法(大部分时候如此)和一个用于纠错的编辑器。
  于是,我所写的这本《精通Perl》作为系列书籍的第三本,第一个问题出现了,前两本《Perl语言入门》和《Perl 进阶》我手头都有,这两本大概都有300 页左右,如果需要限制在同样的页数,我如何将我多年的经验全部塞进这薄薄的一本书里呢?
  一句话,我做不到。因此,我会把我认为你应该知道的都教给你,但是你仍需要学习其他的资源。正如工匠前辈们一样,你不能只片面听一个人的,还需要寻找其他的工匠大师,而这正是Perl 最棒的地方:每个问题都有许多不同的解决方式。其中一些大师写就了非常棒的Perl 书籍,有和本书同一个出版社的,也有其他出版社的。因此,有些主题本书将不再重复,下面我会再谈到这个问题。
  成为大师意味着什么
  本书与《Perl 语言入门》和《Perl 进阶》的侧重点稍有不同,前两本书更偏重于教程类,内容涵盖Perl 语言的大部分细节,但是涉及编程的实践内容只有很少一点。因此,本书有责任在这方面给予读者更多。
  相信购买本书的各位读者都已经基本掌握了Perl ,那么,阅读本书将会锻炼你回答自我、发掘自我的能力,虽然这个过程比简单地请教他人需要付出更多的努力,但真正的事实是,这样在建立自身经验的同时,避免了因为打扰别人耗费更多的精力。
  虽然我没有像Advanced Perl Programming, First Edition(《高级Perl 编程》,第1 版)和MasteringRegular Expressions(《精通正则表达式》)(http://shop.oreilly.com/product/9780596528126.do)这两本书那样,在书中涵盖其他的语言,但是你自己应该学一些其他语言。这会激发你已有的Perl 知识,带给你新的观点,这些新观点中一些会使你更加欣赏Perl ,而另外一些则会使你了解到Perl 的缺陷。
  作为一名大师,你总有一天会遇到Perl 的某些缺陷。如果你没有这样一张列表,上面列举着你最痛恨的关于Perl 的五件事,以及用于支持这五件事的事实,我敢说,学习Perl ,你可能做得还远远不够;关于这一点,具体可以参见我的主题演讲视频“My Frozen Perl 2011Keynote”(http://bit.ly/JDI5LC)。这并不是Perl 本身的错。所有的语言都是如此。对Perl 的精通过程就包含了对这些东西的了解,以及了解之后对Perl 的坚持,因为对于你的程序来说,Perl 的强大要远远比那些缺点有价值得多。正因为你能够辩证地认知问题的两个方面,做出明智的选择,进而才能指导他人,而这样的人便称之为大师。
  以上所有这些都在讲如何成就大师之路,涉及工作、阅读,以及和他人的交流。你做得越多,学得就越多。大师之路没有捷径。也许如你学习其他语言一样,学Perl 时,语法学得很快,但这只是整段经历中最小的一部分。即使你掌握了Perl 的大部分知识,你可能仍然需要花时间阅读一些“元”编程书籍,这些书讨论的是编程实践,而不只是摆弄语法。这些书使用的也许不是Perl 语言,但为了读懂它们,如我之前所说,你需要学习一些其他语言。作为大师,时刻保持学习。
  成就大师之路需要你比学习计划掌握得更多,比昨天的自己努力得更多,还要竭尽所能从其他人的经验中汲取得更多。这不仅仅与你自己写的代码有关,因为你还需要与许多其他作者的代码打交道。
  这听起来很难,但这就是成就大师之路。它值得你为之奋斗!别放弃!祝你好运!
  本书适用于哪些人
  本书是《Perl 进阶》的后续书籍,因此我假设你已经了解并适应了上一本书中的引用、对象和模块等概念。本书中有的地方我也会引用《Perl 进阶》中的内容,届时需要你刷新一下相应的技能。
  如果是直接从其他语言转过来的,并且之前从未使用过Perl ,或者仅仅是简单接触过Perl,我建议你浏览一下《Perl 语言入门》和《Perl 进阶》,以便掌握语言的基础内容。但这样,你可能有时会不认识来源于实践和经验的惯用词汇。总之,我并不想告诉你别买这本书(嘿,我还得付房贷呢!),但这本书对你的作用可能并不如我计划的那么好,至少现在如此。
  如何阅读本书
  我并不想编写所谓的“保留曲目:更多Perl 功能”第三卷。我想教授给读者属于自己的Perl学习方法。我将带你走上属于你自己的成就大师之路,作为学徒,你需要依靠自己完成一些工作。有时这代表我会告诉你在Perl 文档中到哪里去寻找答案(同时这也意味着我可以腾出地方谈论一些其他话题)。
  你不需要依照任何顺序阅读各章节,各章节内容并不是循序渐进的。如果某些内容你不感兴趣,大可放心地直接跳过。
  关于某个主题,如果你想了解更多,可以参见我在每一章末尾附上的参考引用。
  你需要掌握哪些已有知识假设你已经了解我们所编写的《Perl 语言入门》和《Perl 进阶》中的所有内容。这里的“我们”,指共同作者Randal Schwartz、Tom Phoenix 和我。
  最重要的是,你应该了解以下主题,其中每一条都隐含了其他主题的相关知识:
  使用Perl 模块
  书写Perl 模块
  参数引用、子程序以及文件句柄
  基本的正则表达式语法及其工作原理
  面向对象Perl
  如果要讨论前面书中没有的一些内容,我会适当解释得深一些。如果涉及前面书里已经讲过的内容,我可能会再次强调,因为它们确实很重要。
  本书包括在《Perl 语言入门》中学习了Perl 的基本语法,以及在《Perl 进阶》中学习了模块和团队开发的基础知识之后,接下来你需要学习一些Perl 术语,以及如何为用户编写无须帮助就能自主使用的可扩展应用程序。
  本书会包括一些你在前两本书中已经见过的内容,但是深度更深。正如我们在《Perl 语言入门》中说过的,有时我们会用善意的谎言来简化细节,从而使你尽快进步,避免陷入困境。现在,是时候在困境中稍微折腾一下了。
  但是,不要把我所有的话当成绝对的真理。世界上有几百万名Perl 程序员,他们都有自己的做事方法。Perl 的成就大师之路有时需要你阅读相当数量的Perl 代码,即使有些你永远也用不到。我会尽力说服你不要去干那些我认为的傻事,但那只是我的个人观点。因为你努力想要成为一名优秀的程序员,你的知识储备永远需要比实践中用到的更充裕。有时我会展示一些不建议你使用的东西,但我知道,很可能你又会在其他人的代码里看到它们。唉,这个世界并不完美。
  编程并不全都是往代码里添加或修改新功能。有时要抽出部分代码,检测、观察它神奇的运行过程。有时则需要你剔除不必要的代码。编程实践并不仅仅是创建应用程序。它还涉及对代码的管理和争论。我还会展示一些技术,并非用于我们的开发工作,而是用于分析。
  本书不包括
  经过和编辑们的讨论,我们决定不再重复那些其他书本已经充分介绍过的主题。你也需要从其他大师那里学习,我真的不想让本书占用你书架上不必要的空间。忽略这些主题不但让我省了不少事,节省下来的空间还能用于其他更多的东西,一箭双雕。无论如何,你应该已经读过那些书了。
  本书忽略这些主题并不是说你也可以忽略学习它们,在合适的地方,我会指给你相应该看的书。我在附录A中列出了一些书,我认为你应该在精通Perl 的路上把这些书收入你的书库。它们都是由其他Perl 大师写就的,每一本都有你值得学习的东西。在大多数章节最后,我还为你列出了其他一些资源。真正的大师从不停止学习。
  不过,既然你已经读到这里了,那么无论出于何种原因,我就简单列出我将明确忽略的主题:Perl 的内部机制、Perl 嵌入、线程、最佳范例、面向对象编程、源码过滤器和海豚(这是一本关于“海豚安全(dolphin-safe)译注1”的书)。
  本书结构
  对本书内容范围以及写作目的的介绍。
  第1章,高级正则表达式
  进一步介绍正则表达式的特性,包括全局匹配、环视结构(lookarounds)、可读正则表达式,以及正则表达式调试。
  第2章,安全编程技术
  本章介绍一些如何避免编程问题的常用技术,包括污点检测(taint checking)和一些常见陷阱(gotchas)。
  第3章,Perl 调试器
  简单介绍Perl 调试器,如何写出你自己的调试器,以及如何使用第三方调试器。
  第4章,Perl 性能分析
  在你付诸行动改进Perl 程序之前,首先找出改哪里,改什么。
  第5章,Perl 基准测试
  指出哪种实现方法在时间、空间以及其他指标下的表现更好,还有发现这些数值真正意义的一些注意事项。
  第6章,清理Perl 程序
  使用Perl::Tidy 模块或Perl::Critic 模块排布别人的代码(或者甚至是你自己写的代码),使其更具美观性和可读性。
  第7章,符号表和Typeglob
  学习如何使用Perl 追踪包变量,如何将这一机制运用于某些强大的Perl 魔法。
  第8章,动态子程序
  实时定义子程序,帮助过程式编程设计转败为胜。摒弃迭代数据,转而遍历子程序列表,使你的程序更高效,更易于维护。
  第9章,修改和提升模块
  免于编辑原来的代码就能修复代码,这样你就能轻松回到原来的代码。
  第10章,配置Perl 程序
  让你的用户不用接触代码就可以配置程序。
  第11章,检测和报告错误
  学习如何让Perl 报告错误,如何检测Perl 无法报告的错误,以及如何将这些消息通知给用户。
  第12章,日志
  通过使用一个极其灵活而又强大的日志工具包Log4Perl ,让你的Perl 程序随时向你汇报情况。
  第13章,数据持久化
  存储数据以备稍后其他程序使用,或供同一程序的下次运行时使用,又或者以文本方式通过网络进行传输。
  第14章,使用Pod
  将Perl 特有的POD 文档翻译成其他任何你喜欢的格式,并进行测试。
  第15章,位操作
  使用位操作符和位向量高效存储大量数据。
  第16章,绑定变量的魔法
  不只是使用,而是创造你自己独有的Perl 基本数据类型,完成任何你想要的操作。
  第17章,模块即程序
  以模块的方式编写程序,充分利用Perl 模块的发行、安装和测试工具的所有优点。
  附录A,延伸阅读
  探索这些资源,继续你的Perl 学习。
  附录B,brian 的Perl 问题解决指导手册
  我最流行的手把手教程可以帮你解决任何Perl 问题。跟随教程,提高你解决问题的技巧。
  本书所使用的约定
  以下是本书所使用的排版约定:
  斜体(Italic)
  表示新的术语、网址(URL)、电子邮件地址、文件名和文件扩展名。
  等宽字体(Constant width)
  用于程序清单及段落中引用的程序元素,如变量名和函数名、数据库、数据类型、环境变量、声明和关键字。
  等宽粗字体(Constant width bold)
  表示命令或由用户输入的文本。
  示例代码的使用
  补充材料(示例代码、练习等)可在http://www.masteringperl.org/下载。
  本书的目的是帮助你完成工作。一般来说,如果示例代码是随本书提供的,那么你可以在你的程序和文档中使用它。你不需要与我们联系来获得许可,除非你直接复制大部分的代码。例如,编写程序时使用了本书中的几段程序代码不需要许可。销售或分发O’Reilly 书籍中例子的CD-ROM 是必须经过许可的。引用本书及本书中的示例代码来回答问题不需要许可。将本书中大量的示例代码整合到你的产品文档中则需要获得许可。我们很感谢你在引用的时候保留出处信息,但是不强制。出处信息通常包括书名、作者、出版社以及国际标准图书编号(ISBN)。例如:“《精通Perl,第2 版》,作者brian d foy (O’Reilly)。
  Copyright 2014 brian d foy,978-1-449-39311-3。”
  如果你在使用示例代码时感到超出了合理的使用范围,或是属于以上某种需要授权的情况,请随时联系我们permissions@oreilly.com。
  Safari® Books OnlineSafari Books Online(www.safaribooksonline.com)是一个发布来自全球技术和商业领域的顶尖作者写的书和视频等优质内容的按需数字化图书馆。
  技术专业人士、软件开发者、网站设计师及商业和创意专业都用Safari Books Online 作为他们的主要研究、解决问题、学习和认证培训资源。
  Safari Books Online 提供了一系列产品及针对组织、政府和个人不同的定价方案,订阅者可以访问到成千上万的图书、培训视频及出版前的手稿,这些内容都可以从出版社,如O’ReillyMedia、Prentice Hall Professional、Addison-Wesley Professional、Microsoft Press、Sams、Que、Peachpit Press、Focal Press、Cisco Press、John Wiley & Sons、Syngress、Morgan Kaufmann、IBMRedbooks、Packt、Adobe Press、FT Press、Apress、Manning、New Riders、McGraw-Hill、Jones& Bartlett、Course Technology 等数据库中搜索而得到,想了解更多关于Safari Books Online的信息,请在线访问我们。
  联系我们
  对于本书的评论或问题,请联系出版商。
  美国:
  O’Reilly Media, Inc.
  1005 Gravenstein Highway North
  Sebastopol, CA 95472
  中国:
  北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
  奥莱利技术咨询(北京)有限公司
  我们为本书设置了一个网页,在该网页中列出了勘误表、示例和所有附加的信息,你可以从以下网址访问该页面:http://oreil.ly/mastering-perl-2e。
  评论或询问与本书相关的技术问题也可以发送邮件到bookquestions@oreilly.com。
  了解更多关于本书、课程、会议和新闻的信息,请访问我们的网站:http://www.oreilly.com。
  我们的Facebook:http://facebook.com/oreilly
  我们的Twitter:http://twitter.com/oreillymedia
  我们的YouTube 视频:http://www.youtube.com/oreillymedia
  致谢
  在写本书第1 版的那一年,很多人给了我帮助。Mastering Perl 邮件列表的读者在我初稿期间给了我持续不断的反馈,其中发来的大部分建议我都采纳了,这些建议来自Andy Armstrong、David H. Adler、Renée Bäcker、Anthony R. J. Ball、Daniel Bosold、Alessio Bragadini、PhilippeBruhat、Katharine Farah、Shlomi Fish、Deyan Ginev、David Golden、Bob Goolsby、Ask BjørnHansen、Jarkko Hietaniemi、Joseph Hourcle、Adrian Howard、Offer Kaye、Stefan Lidman、EricMaki、Joshua McAdams、Florian Merges、Jason Messmer、Thomas Nagel、Xavier Noria、ManuelPégourié-Gonnard、Les Peters、Bill Riker、Yitzchak Scott-Thoennes、Ian Sealy、Sagar R. Shah、Alberto Simões、Derek B. Smith、Kurt Starsinic、Adam Turoff、David Westbrook 和Evan Zacks。
  还有更多的人为第1 版提交了勘误表。我十分确信,正是他们的详细审查始终让我保持在正确的道路上。
  Tim Bunce 在性能分析章节给了我非常友善的建议,包括DBI::Profile 模块等内容,而Jeffrey Thalhammer 则用他的Perl::Critic 模块大大地帮助了我目前的开发工作。Perrin Harkins、Rob Kinyon 和Randal Schwartz 自始至终都在帮我录入第1 版的手稿,我很高兴选择他们作为我的技术评审,他们的意见总是十分准确和恰当的。第2 版时,MatthewHorsfall 和André Philipp 的录入工作则对我意义重大。
  尽管可能会害怕我没完没了的滋扰,但Allison Randal 仍然为本项目提供了非凡的Perl 建议与编辑指导。还有一些来自O’Reilly 其他好友的帮助,他们的付出远比一位作者创作一本书要多得多。因此,下次你碰见某一位O’Reilly 雇员的时候,一定要替我感谢他(她)。最后,我要感谢Perl 社区,多年来,从我成为其中一员时起,社区一直对我无比的友善、支持。有如此多伟大的程序员和管理员帮助我不断成为更加优秀的程序员,而我希望谨以此书,同样能够帮助那些刚刚加入Perl 的人们。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-156708-1-1.html 上篇帖子: perl 引用-分享 下篇帖子: cgi+perl+ajax初探
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表