目录
第 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 使用Expo