第1章 Perl基础 1
条款1 查阅Perl及其模块的文档 1
条款2 在需要时开启Perl新特性 3
条款3 打开约束指令,让编码更规范 4
条款4 了解魔符的含义 7
条款5 弄清变量名字空间 8
条款6 解字串和数值比较间的差异 9
条款7 弄清何时变量为假,并依此作出正确判别 11
条款8 理解字符串和数字之间的转换 14
条款9 弄清列表和数组间的差别 17
条款10 如需空数组,请勿用undef赋值 19
条款11 仅需单个元素时请勿用切片 21
条款12 解上下文及其对操作的影响 25
条款13 用数组或散列集结一组数据 27
条款14 用bignum处理大数 29
第2章 Perl的地道用法 31
条款15 为优雅、简洁而使用?_ 32
条款16 了解其他默认参数 35
条款17 常见简写和双关语 37
条款18 避免过分依赖标点符号 41
条款19 调整列表格式以便于维护 43
条款20 善用foreach、map和grep 44
条款21 了解各种字符串引用方法 47
条款22 掌握多种排序方式 50
条款23 通过智能匹配简化工作 54
条款24 用given-when构造switch语句 55
条款25 用do{}创建内联子程序 58
条款26 用List::Util和List::MoreUtils简化列表处理 60
条款27 用autodie简化错误处理 63
第3章 正则表达式 66
条款28 了解正则表达式操作符的优先级 66
条款29 使用正则表达式的捕获功能 69
条款30 使用更精确的空白字符组 74
条款31 使用命名捕获,给匹配加标签 77
条款32 仅需分组时,用非捕获括号 78
条款33 小心处理匹配变量 79
条款34 能懒则懒,不要贪婪 81
条款35 用零宽断言匹配字串中的特定位置 82
条款36 简单字串处理应避免使用正则表达式 85
条款37 提高正则表达式的可读性 87
条款38 避免不必要的回溯 90
条款39 仅编译正则表达式一次 93
条款40 预编译正则表达式 94
条款41 正则表达式的性能评测 95
条款42 不要滥造正则表达式 97
第4章 子程序 99
条款43 理解my和local之间的差异 99
条款44 若非必要请勿直接使用@_ 106
条款45 用wantarray按需返回列表 108
条款46 传递引用而非副本 110
条款47 用散列传递命名参数 113
条款48 通过参数原型声明以特殊方式解析参数 116
条款49 创建闭包锁住数据 118
条款50 用子程序创建新子程序 121
第5章 文件与文件句柄 124
条款51 不要忽略文件测试操作符 124
条款52 始终以三项参数的形式调用open 126
条款53 采用不同方式读取数据流 127
条款54 处理字符串的文件句柄 129
条款55 灵活的输出方式 132
条款56 用File::Spec或Path::Class处理文件路径 134
条款57 将数据留于磁盘以节约内存 136
第6章 引用 139
条款58 解引用和引用的语法 139
条款59 将引用类型和原型进行比较 145
条款60 通过引用创建包含数组的数组 147
条款61 别将匿名数组和列表直接量搞混淆 149
条款62 通过匿名散列创建C风格的struct结构 150
条款63 小心循环数据结构 152
条款64 用map和grep操作复杂数据结构 154
第7章 CPAN 158
条款65 以非管理员权限安装CPAN模块 159
条款66 拥有自己的CPAN 161
条款67 减少公共代码带来的风险 164
条款68 安装模块前先行调研 166
条款69 确保Perl能找到我们的模块 168
条款70 为CPAN作贡献 171
条款71 了解常用模块 173
第8章 Unicode 176
条款72 在源代码中使用Unicode字符 177
条款73 告诉Perl该用何种编码方式 179
条款74 通过代码值或名字输入Unicode字符 180
条款75 位组字串转换到字符字串 182
条款76 Unicode字符和属性的模式匹配 185
条款77 同字素打交道,而不是字符 188
条款78 谨慎处理数据库中的Unicode 190
第9章 软件分发 192
条款79 用Module::Build构建发行版 192
条款80 不必手工新建软件发行版 194
条款81 给模块取个好名字 198
条款82 在代码中嵌入Pod文档 201
条款83 限制我们的发行版用于特定平台 204
条款84 检查Pod文档 206
条款85 嵌入其他语言代码 209
条款86 用XS链接低级语言,提高运行速度 211
第10章 测试 215
条款87 用prove灵活运行测试 215
条款88 有目的性地运行测试 218
条款89 用依赖注入避免特殊测试逻辑 220
条款90 避免给方法引入不必要的东西 222
条款91 把程序写成模块便于测试 224
条款92 用虚拟的对象或接口测试 227
条款93 用SQLite创建测试用数据库 231
条款94 用Test::Class编写结构化测试 232
条款95 项目一开始就准备好测试 235
条款96 度量测试覆盖率 240
条款97 把CPAN Testers当作QA团队 243
条款98 设置持续编译系统 244
第11章 警告信息 250
条款99 启用警告功能定位可疑代码 250
条款100 利用词法作用域选择性启用或关闭警告 253
条款i01 用die抛出异常 255
条款102 用Carp来获得栈跟踪信息 256
条款103 正确处理异常 259
条款104 通过污染检查跟踪危险数据 261
条款105 对老旧程序启用污染警告 263
第12章 数据库 265
条款106 预备SQL语句以复用并节省时间 265
条款107 利用SQL占位符将参数值自动引起 268
条款108 通过绑定返回列快速访问数据 270
条款109 复用数据库连接 272
第13章 杂项 275
条款110 编译并安装自己的perl解释器 275
条款111 用Perl::Tidy美化代码 277
条款112 使用Perl Critic 280
条款113 用Log::Log4perl记录程序运行状态 284
条款114 明白循环内的数组何时会被修改 289
条款115 不要用正则表达式提取逗号分隔的字串 290
条款116 用unpack处理固定列宽的数据 291
条款117 用pack和unpack对数据作变形处理 293
条款118 借用typeglob访问符号表 298
条款119 用BEGIN初始化,以END善后 300
条款120 用单行Perl命令作为迷你程序 302
附录 Perl资源 307