第1章 Perl简介 1
1.1 Perl的发展现状 2
1.2 获取Perl 2
1.2.1 在非Windows平台使用Perl∷perlbrew 3
1.2.2 使用Windows平台 5
1.3 Perl社区 6
1.3.1 IRC 7
1.3.2 PerlMonks 7
1.3.3 PerlMongers 8
1.3.4 StackOverflow 8
1.4 使用Perl文档 9
1.4.1 理解perldoc的结构 9
1.4.2 开始使用perldoc 10
1.4.3 使用教程和常见问题解答 10
1.4.4 使用perldoc-f 11
1.5 使用终端窗口 12
1.5.1 使用命令行 12
1.5.2 创建工作目录 13
1.6 创建“Hello,World!”程序 15
1.6.1 编写你的第一个程序 15
1.6.2 sbebang行 17
1.7 本章小结 18
第2章 理解CPAN 19
2.1 CPAN和metacpan 20
2.1.1 搜索和评价模块 21
2.1.2 下载和安装 22
2.2 cpan客户端 26
2.2.1 使用CPAN.pm客户端 26
2.2.2 使用cpanm客户端 27
2.2.3 ppm 28
2.2.4 CPAN∷Mini 28
2.3 本章小结 31
第3章 变量 33
3.1 何为程序设计 34
3.2 正式开始前的注意事项 34
3.2.1 strict、warnings及diagnostics 34
3.2.2 my函数 35
3.2.3 魔符 36
3.2.4 标识符 36
3.3 标量 37
3.3.1 字符串 38
3.3.2 数字 41
3.4 数组 43
3.4.1 分解代码 43
3.4.2 访问元素 44
3.4.3 对数组进行迭代 46
3.5 哈希表 47
3.5.1 访问元素 47
3.5.2 对哈希表进行迭代 48
3.5.3 对哈希增加数据 48
3.6 切片 50
3.6.1 数组切片 50
3.6.2 哈希切片 50
3.7 上下文 51
3.7.1 标量上下文 51
3.7.2 列表上下文 52
3.8 作用域 54
3.8.1 my变量 55
3.8.2 包变量 56
3.9 strict、warnings和diagnostics 59
3.9.1 strict 60
3.9.2 warnings 60
3.9.3 diagnostics 61
3.9.4 在没有网络的情况下工作 62
3.10 Perl的内置变量 64
3.10.1 $_ 64
3.10.2 %ENV 65
3.10.3 @ARGV 65
3.10.4 其他的特殊变量 65
3.11 本章小结 66
第4章 数据处理 69
4.1 使用标量 70
4.1.1 字符串处理 71
4.1.2 使用字符串操作符 78
4.1.3 Scalar∷Util 81
4.1.4 数值型内置函数或操作符 81
4.1.5 位操作符 86
4.1.6 了解布尔操作 86
4.1.7 赋值操作符 90
4.1.8 优先级和关联性 91
4.2 数组和列表函数 93
4.2.1 内置数组函数 93
4.2.2 List∷Util 97
4.3 内置的哈希函数 97
4.3.1 delete() 97
4.3.2 exist() 98
4.3.3 key() 98
4.3.4 values() 98
4.3.5 each() 98
4.4 作用域关键字 99
4.4.1 my() 100
4.4.2 local() 100
4.4.3 our() 100
4.4.4 state() 101
4.5 本章小结 101
第5章 流程控制 103
5.1 使用if语句 103
5.1.1 理解基本的条件语句 104
5.1.2 else/elsif/unless 105
5.1.3 三元操作符?: 109
5.2 for/foreach循环 110
5.2.1 数组 110
5.2.2 列表 112
5.2.3 C语言风格 113
5.3 使用while或until循环 118
5.3.1 列表 119
5.3.2 内置函数:last()、next()、redo()和continue() 120
5.3.3 标签 122
5.4 语句修饰符 123
5.4.1 语句修饰符的类型 123
5.4.2 do while或do until 124
5.5 given/when语句 126
5.5.1 基本语法 126
5.5.2 Switch模块 128
5.6 本章小结 128
第6章 引用 131
6.1 关于引用的基础知识 131
6.1.1 数组引用 132
6.1.2 哈希引用 133
6.1.3 匿名引用 134
6.1.4 其他引用 136
6.2 使用引用 139
6.2.1 调试 139
6.2.2 复制 141
6.2.3 切片 144
6.3 本章小结 145
6.4 练习 145
第7章 子程序 147
7.1 子程序的语法 148
7.1.1 参数处理 148
7.1.2 多重参数 149
7.1.3 命名参数 150
7.1.4 别名 152
7.1.5 状态变量(5.10之前版本和5.10之后版本) 153
7.1.6 传递列表、哈希或哈希引用? 154
7.2 返回数据 157
7.2.1 返回真/假 157
7.2.2 返回单值或多值 158
7.2.3 wantarray函数 159
7.3 错误 160
7.3.1 注意!终止程序 161
7.3.2 carp和croak 161
7.3.3 eval 162
7.3.4 evalGotchas 164
7.3.5 Try∷Tiny 165
7.4 子程序引用 165
7.4.1 已有的子程序 166
7.4.2 匿名子程序 166
7.4.3 闭包 166
7.5 原型 169
7.5.1 参数强制 169
7.5.2 更多原型技巧 171
7.5.3 仿造内置函数 172
7.5.4 前置声明 174
7.5.5 原型总结 175
7.6 递归 177
7.6.1 基本递归 177
7.6.2 分治法 178
7.6.3 记忆子程序 179
7.7 注意事项 183
7.7.1 参数别名 183
7.7.2 作用域问题 183
7.7.3 功能过多 184
7.7.4 参数过多 184
7.8 本章小结 184
第8章 正则表达式 187
8.1 基本匹配 187
8.1.1 限定符 189
8.1.2 转义序列 191
8.1.3 提取数据 193
8.1.4 修饰符和锚字符 195
8.1.5 字符类 197
8.1.6 分组 198
8.2 高级匹配 201
8.2.1 替换 201
8.2.2 向前查找/向后查找锚位 201
8.2.3 命名的子表达式(需Perl 5.10或更高版本) 203
8.3 常见的正则表达式问题 206
8.3.1 Regexp∷Common 206
8.3.2 E-mail地址 207
8.3.3 HTML 207
8.4 本章小结 209
第9章 文件与目录 213
9.1 基本的文件处理方法 214
9.1.1 打开并读取文件 214
9.1.2 文件测试操作符 220
9.1.3 菱形操作符 222
9.1.4 临时文件 223
9.1.5 DATA文件 223
9.1.6 binmode 225
9.2 目录 227
9.2.1 读取目录 227
9.2.2 文件名代换 227
9.3 Unicode 228
9.3.1 Unicode的概念 229
9.3.2 两条简单的规则 229
9.3.3 一些复杂的规则 232
9.4 本章小结 244
第10章 sort、map和grep 247
10.1 基本排序 248
10.1.1 按字母顺序排序 248
10.1.2 按数字顺序排序 249
10.1.3 反向排序 249
10.1.4 复杂的排序条件 250
10.1.5 编写一个排序子程序 251
10.1.6 排序和Unicode码 252
10.2 map函数和grep函数 256
10.2.1 使用grep函数 256
10.2.2 使用map函数 261
10.2.3 别名问题 263
10.2.4 关于实现过多功能 264
10.2.5 关于编写精巧的代码 265
10.3 汇总 265
10.3.1 Schwartzian变换(也就是修饰、排序以及去除修饰) 266
10.3.2 Guttman-Rosler变换 267
10.4 本章小结 268
第11章 包和模块 271
11.1 名称空间和包 272
11.1.1 use和require 276
11.1.2 包变量 278
11.1.3 版本号 281
11.2 其他包中的子程序 281
11.2.1 导出 281
11.2.2 命名惯例 284
11.3 BEGIN、UNITCHECK、CHECK、INIT和END 288
11.3.1 BEGIN模块 289
11.3.2 END块 290
11.3.3 INIT、CHECK和UNITCHECK块 290
11.4 置标语言(POD) 291
11.4.1 文档结构 293
11.4.2 标题 293
11.4.3 段落 293
11.4.4 列表 294
11.4.5 字面段落 294
11.4.6 其他方面 295
11.5 创建与安装模块 296
11.5.1 创建一个简单的模块 296
11.5.2 Makefile.PL还是Module∷Build? 301
11.6 本章小结 301
第12章 面向对象的Perl 303
12.1 以私人买手AEVAR为例讲解什么是对象 304
12.2 Perl OO的三条规则 304
12.2.1 类就是包 305
12.2.2 对象就是知道其所属类的引用 306
12.2.3 方法就是子程序 308
12.3 关于对象的另一种观点 320
12.3.1 使用TV∷Episode 320
12.3.2 子类化 323
12.3.3 使用TV∷Episode∷Broadcast 323
12.3.4 类数据和实例数据 327
12.4 简单回顾 329
12.4.1 重载对象 329
12.4.2 使用UNIVERSAL 332
12.5 了解私有方法 335
12.6 错误陷阱 340
12.6.1 非必需的方法 340
12.6.2 “内部接触” 340
12.6.3 多继承 341
12.7 本章小结 343
第13章 Moose 345
13.1 了解基本Moose语法 346
13.2 使用属性 348
13.3 使用构造函数 351
13.3.1 BUILDARGS 351
13.3.2 BUILD 352
13.4 了解继承 353
13.5 谨慎使用Moose 354
13.6 高级Moose语法 358
13.6.1 使用类型约束 358
13.6.2 使用方法修改器 361
13.6.3 了解和使用角色 364
13.6.4 探讨MooseX 368
13.6.5 重写Television∷Episode 370
13.7 Moose最佳实践 376
13.7.1 使用namespace∷autoclean并把类设为不可变的 376
13.7.2 绝不重写new() 376
13.7.3 始终调用父类的BUILDARGS方法 376
13.7.4 如果属性是非必需的,就提供默认值 376
13.7.5 默认只读 377
13.7.6 把自定义类型置于单独模块中并为它们指定名称空间 377
13.7.7 别使用多重继承 377
13.7.8 始终同时消费所有角色 377
13.8 本章小结 378
第14章 测试 381
14.1 基本测试 382
14.1.1 使用Test∷More 382
14.1.2 编写测试 384
14.1.3 了解prove实用工具 385
14.2 了解Test∷More的一些测试函数 386
14.2.1 使用ok 386
14.2.2 使用is 387
14.2.3 使用like 389
14.2.4 使用is_deeply 390
14.2.5 使用SKIP 391
14.2.6 使用TODO 391
14.2.7 使用eval{} 392
14.2.8 使用use_ok和require_ok 393
14.2.9 使用其他各类测试函数 393
14.3 使用其他一些测试模块 397
14.3.1 使用Test∷Differenoes 397
14.3.2 使用Test∷Exception 399
14.3.3 使用Test∷Warn 400
14.3.4 使用Test∷Most 400
14.4 了解xUnit风格的测试 401
14.4.1 使用Test∷Class 401
14.4.2 基本测试类 403
14.4.3 扩展测试类 406
14.4.4 使用测试控制方法 410
14.4.5 调用父类的测试控制方法 412
14.5 本章小结 416
第15章 互联网 419
15.1 HTTP简介 420
15.1.1 Plack 421
15.1.2 Hello World程序 422
15.1.3 处理参数 427
15.1.4 模板 428
15.1.5 处理POST请求 433
15.1.6 会话 436
15.2 Web客户端 447
15.2.1 提取网页中的链接 448
15.2.2 提取网页中的注释 449
15.2.3 借助程序填写表单 450
15.3 本章小结 455
第16章 数据库 457
16.1 使用DBI 458
16.1.1 连接数据库 458
16.1.2 使用SQLite 460
16.1.3 使用DBD∷SQLite 460
16.2 选择基本的数据 465
16.2.1 使用SELECT语句 465
16.2.2 使用绑定参数 468
16.2.3 插入和更新数据 471
16.2.4 创建事务处理 472
16.2.5 错误处理 473
16.3 本章小结 473
第17章 使用其他外部工具 475
17.1 命令行 475
17.1.1 读取用户输入 476
17.1.2 处理命令行实参 478
17.1.3 perlrun 480
17.2 其他程序 485
17.2.1 运行外部程序 485
17.2.2 读取其他程序的输出 487
17.2.3 写入其他程序的输入 488
17.2.4 STDERR 490
17.3 本章小结 492
第18章 常见任务 495
18.1 使用CSV数据 496
18.1.1 读取CSV数据 497
18.1.2 写入CSV数据 498
18.2 理解基本的XML 499
18.2.1 读取XML数据 499
18.2.2 写入XML数据 503
18.3 日期处理 506
18.3.1 使用DateTime模块 507
18.3.2 使用Date∷Tiny模块和DateTime∷Tiny模块 507
18.4 理解你的程序 513
18.4.1 使用调试器 513
18.4.2 性能分析 519
18.4.3 Perl∷Critic模块 528
18.5 本章小结 531
第19章 进阶 533
19.1 接下来的事情 534
19.1.1 本书涵盖的内容 534
19.1.2 本书略而不谈的内容 534
19.2 了解对象-关系映射器 535
19.2.1 了解DBIx∷Class 536
19.2.2 了解DBIx∷Class的基本用法 536
19.2.3 了解ORM的优缺点 539
19.2.4 使用DBIx∷Class∷Schema∷Loader 544
19.3 使用Template Toolkit 545
19.3.1 使用模板的理由 545
19.3.2 Template Toolkit入门 546
19.4 使用Catalyst构建应用程序 554
19.4.1 MVC之美 554
19.4.2 设立Catalyst应用程序 555
19.4.3 使用Catalyst视图 560
19.4.4 使用Catalyst模型 562
19.4.5 使用Catalyst控制器 565
19.4.6 CRUD:创建、读取、更新和删除 566
19.5 本章小结 569
附录 习题答案 573