前言 1
第Ⅰ部分 基础篇 11
第1章 编程之道 11
什么是程序? 11
运行Perl 6 13
第一个程序 14
算术操作符 15
值和类型 16
形式语言和自然语言 18
调试 20
词汇表 21
练习 23
第2章 变量、表达式和语句 25
赋值语句 25
变量名 27
表达式和语句 29
脚本模式 31
单行模式 33
运算次序 33
字符串操作 34
注释 35
调试 36
词汇表 37
练习 39
第3章 函数 41
函数调用 41
函数和方法 44
数学函数 45
组织代码 46
添加新函数(又名子程序) 47
定义和使用 50
计算流程 50
形式参数和实际参数 51
变量和参数是局部的 52
堆栈图 53
有成效的函数和空函数 54
函数签名 56
可变和不可变参数 58
作为头等公民的函数和子程序 59
为什么引入函数和子程序? 61
调试 62
词汇表 63
练习 65
第4章 循环、条件和递归 68
整除和取模 68
布尔表达式 69
逻辑运算符 71
条件化执行 73
否则执行分支 74
链接条件 75
嵌套条件 76
if条件作语句为修饰符 77
unless条件语句 77
for循环 78
递归 80
递归子例程的堆栈关系图 82
无限递归 83
键盘输入 83
程序参数和MAIN子程序 84
调试 85
词汇表 86
练习 88
第5章 有成效的子程序 91
返回值 91
渐进开发 93
组织代码 96
布尔函数 97
一个完整的编程语言 98
深入递归 99
靠信心的飞跃 102
再举一个例子 102
检查类型 103
multi子程序 105
调试 106
词汇表 108
练习 108
第6章 迭代 111
赋值与等值 111
重新赋值 112
更新变量 112
while语句 113
局部变量和变量作用域 115
控制流语句(last、next等) 118
平方根 120
算法 123
调试 123
词汇表 124
练习 125
第7章 字符串 127
字符串是一个序列 127
常用字符串操作符 128
字符串长度 128
字符串中查找子字符串 129
从字符串中提取子字符串 130
其他几个有用的字符串函数或方法 131
使用while或for循环遍历字符串 133
循环和计数 135
正则表达式(正则) 136
使用正则表达式 137
创建正则表达式模式 139
字面匹配 139
通配符和字符类 140
量词 141
锚点和断言 142
分支条件 144
分组和捕获 145
副词(又叫修饰符) 146
正则表达式练习 147
整合在一起 148
提取日期 148
提取IP地址 150
替换 151
subst方法 151
s/search/replace/结构 152
使用捕获 153
副词(修饰符) 153
调试 153
词汇表 156
练习 157
第8章 案例研究:文字游戏 161
读取文件和写入文件 161
读取单词列表 163
练习 164
查找 166
超过20个字符的单词(解决方案) 166
不含“e”的单词(解决方案) 167
避免其他字母(解决方案) 168
只使用部分字母(解决方案) 169
使用列表的所有字母(解决方案) 170
字母顺序(解决方案) 170
归约到先前解决的问题的另一个例子 172
调试 172
词汇表 173
练习 173
第9章 数组和列表 176
列表和数组都是序列 176
数组是可变的 179
向数组中添加或移除某项 181
堆栈和队列 183
修改数组的其他方法 184
遍历列表 186
新的循环构造 188
Map、Filter和Reduce 190
将列表归约为值 190
归约元操作符 191
将列表映射到另一个列表 192
筛选列表元素 194
高阶函数与函数式编程 195
固定大小的数组、固定类型的数组和固定形状的数组 196
多维数组 197
排序数组或列表 198
更高级的排序技术 199
调试 203
词汇表 204
练习 205
第10章 哈希 209
哈希是映射 209
哈希的常见操作 212
哈希作为集合的计数器 214
循环和哈希 215
反向查找 216
存在与否的测试 217
哈希键是唯一的 219
哈希和数组 220
备忘录 223
哈希作为调度表 225
全局变量 226
调试 227
词汇表 228
练习 229
第11章 案例分析:数据结构选择 232
三元条件算子 232
“Switch”语句given...when 233
子程序命名参数和可选参数 235
命名参数 235
可选参数 236
词频分析 237
随机数 238
用词的频率 240
可选参数 243
哈希减法 244
构造新运算符 245
set、bag和mix 246
随机词 248
马尔可夫分析 250
数据结构 253
构建自己的数据结构 254
链表 255
树 256
二叉堆 257
调试 260
词汇表 262
练习:哈夫曼编码 262
变长代码 263
频率表 264
建立哈夫曼代码 264
第Ⅱ部分 高级篇 271
第12章 类和对象 271
对象、方法和面向对象的编程 272
程序员定义的类型 273
属性 275
创建方法 277
矩形和对象内嵌 280
实例作为返回值 282
继承 283
像素类 283
MovablePoint类 285
多重继承:有意思,但明智吗? 287
角色和构成 288
类和角色:示例 289
角色组合和代码重用 291
角色、类、对象和类型 292
方法委派 293
多态性 294
封装 296
私有方法 297
使用私有属性构造对象 298
接口和实现 300
面向对象编程:一个故事 301
牧羊人的寓言 301
寓意 302
多态性 303
调试 303
Perl 6调试器 304
得到一些帮助 304
逐句运行代码 305
在正确的地方停用断点 305
通过跟踪点来记录变量信息 306
跟踪正则匹配过程 306
词汇表 307
第13章 正则和语法 310
简要回顾 310
声明式编程 312
捕获 312
命名规则(子规则) 314
自定义语法 317
语法继承 319
操作对象 320
用于分析JSON的语法 322
JSON格式 322
我们的JSON示例 323
逐步编写JSON语法 323
JSON语法 326
添加操作 327
继承和可变文法 330
调试 330
词汇表 333
练习:数学计算器的语法 334
第14章 函数式编程 335
高阶函数 335
重新审视:函数作为头等对象 335
匿名子程序和Lambda表达式 337
闭包 339
列表处理和管道编程 341
Feed和反向Feed运算符 342
归约元操作符 343
Hyper操作符 343
交叉运算符X和拉链运算符Z 344
列表运算符:小结 345
创建新操作符 346
创建自己的类Map函数 350
自定义版本的map、grep和类似函数 350
我们自己的sort函数 351
迭代器版本的map 353
迭代器版本的grep 354
Gather和Take机制 357
惰性列表和序列运算符 359
序列运算符 360
无限列表 361
使用显式生成器 361
柯里化和无穷操作符 364
创建柯里子程序 364
用assuming方法对现有子程序进行柯里化 365
使用函数编程风格 367
合并排序算法 368
合并排序的非函数化实现 368
合并排序的函数式实现 370
调试 371
词汇表 376
练习:快速排序 377
第15章 最后的一些建议 379
让它清晰,保持简单 379
必要的和禁忌的 380
使用成语 383
接下来是什么? 386
附录A 本书练习的答案 389