前言 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
· · · · · · (
收起)