第1章 简介 1
1.1背景知识 2
1.2 strict和warnings 2
1.3 Perl v5.14 3
1.4关于这些脚注 4
1.5关于后续的练习 4
1.6获取帮助的方式 5
1.7如果是一个Perl课程讲师 5
1.8练习 6
第2章 使用模块 7
2.1标准发行版 7
2.2探讨CPAN 8
2.3使用模块 9
2.4功能接口 10
2.5面向对象的接口 11
2.5.1一个更典型的面向对象模块:Math::BigInt 12
2.5.2更佳的模块输出 13
2.6核心模块的内容 14
2.7 Perl综合典藏网 15
2.8通过CPAN安装模块 16
2.8.1 CPANminus 16
2.8.2手动安装模块 17
2.9适时设定路径 18
2.10在程序外部设定路径 20
2.10.1使用PERL5LIB扩展@INC 20
2.10.2在命令行扩展@INC目录 21
2.11 local::lib 21
2.12练习 23
第3章 中级基础 24
3.1列表操作符 24
3.1.1使用grep表达式过滤列表 25
3.1.2使用map转换列表 27
3.2使用eval捕获错误 28
3.3用eval语句块动态编译代码 30
3.4使用do语句块 31
3.5练习 32
第4章 引用简介 33
4.1在多个数组上完成相同的任务 33
4.2 PeGS:Perl图形结构 35
4.3对数组取引用 36
4.4对数组引用进行解引用操作 38
4.5去除大括号 40
4.6修改数组 40
4.7嵌套的数据结构 41
4.8用箭头简化嵌套元素的引用 43
4.9散列的引用 44
4.10检查引用类型 47
4.11练习 49
第5章 引用和作用域 51
5.1关于数据引用的更多信息 51
5.2如果它曾是变量名将会怎样 52
5.3引用计数和嵌套数据结构 53
5.4当引用计数出现问题时 55
5.5直接创建匿名数组 57
5.6创建匿名散列 59
5.7自动带入 61
5.8自动带入和散列 63
5.9练习 65
第6章 操作复杂的数据结构 67
6.1使用调试器查看复杂的数据 67
6.2使用Data::Dumper模块查看复杂的数据 71
6.3数据编组 74
6.3.1使用Storable模块对复杂数据排序 75
6.3.2 YAML模块 80
6.3.3 JSON模块 81
6.4使用map和grep操作符 81
6.5应用一点间接方法 81
6.6选择和改变复杂数据 83
6.7练习 84
第7章 对子例程的引用 86
7.1对命名子例程的引用 86
7.2匿名子例程 90
7.3回调 92
7.4闭包 93
7.5从一个子例程返回另一个子例程 94
7.6作为输入参数的闭包变量 97
7.7闭包变量作为静态局部变量 98
7.8查询我们自己的身份 101
7.8.1令人着迷的子例程 102
7.8.2转储闭包 105
7.9练习 105
第8章 文件句柄引用 107
8.1旧方法 107
8.2改进的方法 108
8.3指向字符串的文件句柄 110
8.4文件句柄集合 111
8.5 IO::Handle模块和其他相应的模块 112
8.5.1 IO::File模块 113
8.5.2 IO::Scalar模块 114
8.5.3 IO::Tee模块 115
8.5.4 IO::Pipe模块 116
8.5.5 IO::Null模块和IO::Interactive模块 117
8.6目录句柄 117
8.7练习 118
第9章 正则表达式引用 120
9.1正则表达式引用之前 120
9.2预编译模式 122
9.2.1正则表达式选项 123
9.2.2应用正则表达式引用 123
9.3作为标量的正则表达式 124
9.4建立正则表达式 126
9.5创建正则表达式的模块 128
9.5.1使用常见的模式 128
9.5.2组装正则表达式 129
9.6练习 130
第10章 实用的引用技巧 132
10.1更佳的输出 132
10.2用索引排序 134
10.3更为高效的排序 135
10.4施瓦茨变换 136
10.5使用施瓦茨变换实现多级排序 137
10.6递归定义的数据 138
10.7构建递归定义的数据 139
10.8显示递归定义的数据 142
10.9避免递归 143
10.10练习 146
第11章 构建更大型的程序 148
11.1修改通用代码 148
11.2使用eval插入代码 149
11.3使用do语句 150
11.4使用require语句 151
11.5命名空间冲突的问题 153
11.6使用包作为命名空间分隔符 154
11.7 Package指令的作用域 156
11.8包和专门词汇 157
11.9练习 159
第12章 创建你自己的发行版 160
12.1 Perl模块的两个构建系统 160
12.1.1在Makefile.PL内部 161
12.1.2在Build.PL文件内部 162
12.2我们的第一个发行版 163
12.2.1 h2xs工具 163
12.2.2 Module::Starter模块 164
12.2.3定制模版 165
12.3在你的发行版内部 165
12.3.1 META文件 167
12.3.2添加额外的模块 168
12.4模块内部 169
12.5老式文档 171
12.5.1段落的Pod命令 172
12.5.2 Pod段落 172
12.5.3 Pod格式标记 173
12.5.4检查Pod格式 174
12.6模块中的代码 174
12.7模块构建的总结 175
12.7.1创建基于Module::Build模块的发行版 175
12.7.2创建ExtUtils::Makemaker发行版 176
12.8练习 176
第13章 对象简介 177
13.1如果我们可以和动物对话 177
13.2介绍方法的调用箭头 179
13.3方法调用的额外参数 180
13.4调用第二个方法进一步简化 181
13.5关于@ISA的几个注意事项 183
13.6方法重写 184
13.7开始从不同的地方查找 186
13.8使用SUPER的实现方法 186
13.9要对@_做些什么 187
13.10我们在哪里 187
13.11牧场总结 187
13.12练习 189
第14章 测试简介 190
14.1为什么需要测试 190
14.2 Perl的测试流程 191
14.3测试的艺术 193
14.4测试用具 195
14.5标准测试 195
14.5.1模块编译的检查 196
14.5.2模板测试 198
14.5.3测试Pod 200
14.6添加第一个测试 201
14.7测量测试覆盖率 204
14.7.1子例程覆盖率 205
14.7.2语句覆盖率 205
14.7.3分支覆盖率 205
14.7.4条件覆盖率 206
14.8练习 206
第15章 带数据的对象 208
15.1马属于马类,各从其类是吗 208
15.2调用实例方法 210
15.3访问实例数据 211
15.4如何构建Horse的实例 211
15.5继承构造函数 212
15.6编写能够使用类或实例作为参数的方法 213
15.7为方法添加参数 213
15.8更有趣的实例 214
15.9一匹不同颜色的马 215
15.10收回存款 216
15.11不要查看“盒子”里面的内容 217
15.12更快的setter和getter 218
15.13 getter作为双倍的setter 219
15.14仅仅限制一个类方法或者实例方法 219
15.15练习 220
第16章 一些高级对象主题 221
16.1通用方法 221
16.2为了更好的行为而测试对象 222
16.3最后的手段 224
16.4使用AUTOLOAD创建访问器 225
16.5更容易地创建getter和setter 226
16.6多重继承 228
16.7练习 229
第17章Exporter 230
17.1 use语句在做什么 230
17.2使用Exporter模块导入子例程 231
17.3@EXPORT和@EXPORT_OK 232
17.4使用7.515648E-318XPORT TAGS分组 233
17.5定制导入例程 234
17.6练习 236
第18章 对象析构 237
18.1清理 237
18.2嵌套对象析构 239
18.3终结一个“死去”的Horse类 242
18.4间接对象表示法 243
18.5子类中的额外实例 245
18.6使用类变量 246
18.7削弱参数 248
18.8练习 250
第19章 Moose简介 251
19.1用Moose模块创建之前的Animal模块 251
19.1.1使用“角色”替换“继承” 254
19.1.2默认值 254
19.1.3约束值 256
19.1.4封装方法 257
19.1.5只读属性 258
19.2改进的赛马类 259
19.3进一步学习 260
19.4练习 260
第20章 高级测试 261
20.1跳过测试 261
20.2测试面向对象特性 262
20.3分组测试 263
20.4测试大型字符串 264
20.5测试文件 265
20.6测试STDOUT和STDERR 266
20.7使用模拟对象 268
20.8编写我们自己的Test::*测试模块 270
20.9练习 273
第21章 贡献到CPAN 274
21.1 Perl综合典藏网 274
21.2准备阶段 274
21.3 PAUSE的工作方式 275
21.3.1索引器 276
21.3.2模块维护人员 277
21.4在我们开始工作之前 278
21.5准备发行版 278
21.5.1创建或更新README 279
21.5.2检查构建文件 279
21.5.3更新清单 279
21.5.4添加版本字符串 281
21.5.5测试发行版 281
21.6上传发行版 282
21.7在多个平台上测试 282
21.8发布模块 283
21.9练习 283
附录 练习答案 285