第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 238
多态返回值 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章 使用Pod 289
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
本书Perl模块索引 381
索引 385