第1章 Linux及Perl概述 1
1.1 Linux系统简介 2
1.1.1 什么是Linux 2
1.1.2 Linux的发展历史 2
1.1.3 Linux主要发行版本 3
1.1.4 Linux的应用 6
1.1.5 谁在使用Linux 7
1.2 Perl介绍 8
1.2.1 Perl概述 8
1.2.2 Perl发展历史 10
1.2.3 Perl的安装 11
1.2.4 Perl资源 12
1.3 小结与练习 13
1.3.1 小结 13
1.3.2 习题与思考 13
第2章 标量数据 15
2.1 标量变量简介 16
2.1.1 何谓标量变量 16
2.1.2 标量变量的命名 17
2.2 数字标量 17
2.2.1 整型表示法 18
2.2.2 浮点型表示法 20
2.2.4 定点数方案 21
2.2.3 数字格式 21
2.3 字符串标量 22
2.3.1 单引号字符串 22
2.3.2双引号字符串 23
2.3.3 反引号 26
2.3.4 引用操作符 27
2.4 常用的与标量有关的系统函数 27
2.4.1 数学函数 27
2.4.2 标量转换函数 28
2.5.1 小结 29
2.5 小结与练习 29
2.5.2 习题与思考 30
第3章 数组和列表数据 31
3.1 数组和列表的基本概念 32
3.1.1 什么是数组和列表 32
3.1.2 数组的表示 32
3.1.3 列表变量 34
3.2 数组元素的存取 35
3.2.1 列表的赋值 35
3.2.2 存取数组元素 36
3.3.2 数组的输出 39
3.3.1 字符串中的方括号和变量替换 39
3.3 对数组元素的其他操作 39
3.3.3 改变数组元素的值 40
3.4 与数组有关的函数 42
3.4.1 按字符顺序排序——sort函数 43
3.4.2 反转数组——reverse函数 44
3.4.3 数组去尾——chop和chomp函数 44
3.4.4 数组连接/拆分——join/split函数 44
3.4.5 push和pop函数 45
3.4.6 shift和unshift函数 46
3.4.7 拼接函数——splice函数 46
3.5.2 习题与思考 47
3.5 小结与练习 47
3.5.1 小结 47
第4章 散列 49
4.1 散列简介 50
4.1.1 什么是散列 50
4.1.2 为什么要使用散列 50
4.1.3 散列变量 52
4.1.4 全局散列变量 54
4.2 存取散列的元素 54
4.2.1 访问散列中的元素 54
4.2.2 增加元素 55
4.2.3 数组与散列的相互转换 56
4.3 散列函数 57
4.3.1 keys函数 58
4.3.2 values函数 59
4.3.3 each函数 60
4.3.4 delete函数 60
4.4 散列应用举例 62
4.4.1 用散列实现多维数组 62
4.4.2 用散列实现结构 64
4.5.2 习题与思考 65
4.5.1 小结 65
4.5 小结与练习 65
第5章 操作符 67
5.1 数字操作符 68
5.1.1 基本数字操作符 68
5.1.2 数字比较操作符 69
5.1.3 赋值操作符 70
5.1.4 自增自减操作符 72
5.2 字符串操作符 74
5.2.1 字符串比较操作符 74
5.2.2 字符串联接和重复操作符 75
5.3.1 逻辑操作符 77
5.3 逻辑操作符和位操作符 77
5.3.2 位操作符 78
5.4 其他操作符 79
5.4.1 逗号操作符 79
5.4.2 条件操作符 80
5.5 操作符的优先级和结合性 82
5.6 小结与练习 84
5.6.1 小结 84
5.6.2 习题与思考 84
第6章 控制结构 87
6.1.2 养成良好的编程习惯 88
6.1 控制结构中的有关问题 88
6.1.1 语句块 88
6.2 条件语句 90
6.2.1 if系列语句 90
6.2.2 unless语句 94
6.2.3 if语句的嵌套 95
6.3 循环语句 96
6.3.1 while/until循环 97
6.3.2 do while/until循环 99
6.3.3 for循环 100
6.3.4 foreach循环 101
6.4 其他控制语句 103
6.4.1 标记修饰符 103
6.4.2 修改循环控制流的几个语句 104
6.4.3 表达式修饰符 107
6.4.4 和Ⅱ 108
6.5 小结与练习 109
6.5.1 小结 109
6.5.2 习题与思考 110
第7章 正则表达式 113
7.1.2 一个简单的例子 114
7.1.1 什么是正则表达式 114
7.1 正则表达式简介 114
7.2 正则表达式的构成 115
7.2.1 元字符 115
7.2.2 原子 116
7.3 正则表达式的正则 116
7.3.1 单字符类型 117
7.3.2 组合类型 118
7.3.3 定位类型 121
7.3.4 优先级 122
7.3.5 正则表达式正则的应用举例 122
7.4.1 全局匹配 127
7.4 模式修饰符 127
7.4.2 忽略大小写的匹配 129
7.4.3 多行匹配与单行匹配 130
7.4.4 单次匹配 131
7.4.5 多余空格 132
7.5 与正则表达式相关的其他问题 133
7.5.1 模式匹配变量 133
7.5.2 替代函数 134
7.5.3 内插变量 135
7.5.4 模式次序变量 136
7.5.5 扩展模式匹配 137
7.6 小结与练习 138
7.6.1 小结 138
7.6.2 习题与思考 139
第8章 字符串操作 141
8.1 字符串和数值的相互转换 142
8.1.1 数字与字符的相互转换 142
8.1.2 数字与字符串的相互转换 143
8.2 把标量插入字符串 144
8.3 字符串处理函数 145
8.3.1 改变大小写函数 146
8.3.2 字符串截尾函数 147
8.3.3 搜寻子字符串函数 149
8.3.4 子字符串的展开与替代 150
8.3.5 字符串转换函数 153
8.3.6 取字符串长度函数 154
8.3.7 分离和连接字符串函数 155
8.4 小结与练习 157
8.4.1 小结 157
8.4.2 习题与思考 158
第9章 自定义函数 161
9.1 一些常用的系统函数及其使用 162
9.2 自定义函数的定义 165
9.3 函数的调用 166
9.3.1 先定义后调用 167
9.3.2 用 调用 167
9.3.3 前向引用 168
9.3.4 用do调用 168
9.3.5 函数调用的返回值 168
9.4 更方便地使用函数 170
9.4.1 在函数中使用参数 170
9.4.2 在函数定义中使用私有变量 171
9.4.3 使用半私有变量 173
9.4.4 文件层级的my变量 175
9.6 函数的应用举例 176
9.5 Perl 5中预定义的函数 176
9.6.1 二进制和十进制之间的转换函数 177
9.6.2 将角度转换为弧度 177
9.6.3 求一个数的对数 178
9.6.4 数字和英文的对应 178
9.6.5 一个较复杂的例子 180
9.7 小结与练习 182
9.7.1 小结 182
9.7.2 习题与思考 182
第10章 引用 185
10.1 引用简介 186
10.1.1 什么是引用 186
10.1.2 引用操作符 186
10.2 引用变量类型简介 187
10.2.1 直接引用变量 188
10.2.2 常量引用变量 188
10.2.3 函数引用变量 188
10.2.4 符号引用变量 189
10.2.5 匿名引用变量 190
10.3 直接引用变量的使用 192
10.3.1 使用标量引用 192
10.2.6 对象引用变量 192
10.3.2 使用数组引用 194
10.3.3 使用散列引用 195
10.3.4 文件句柄的引用 197
10.4 访问引用的其他方法 198
10.4.1 使用大括号 198
10.4.2 使用向右箭头操作符 199
10.4.3 使用方括号 199
10.4.4 多维数组 199
10.4.5 利用引用传给函数多个数组以及返回多个数组或散列 200
10.5.2 习题与思考 202
10.5.1 小结 202
10.5 小结与练习 202
第11章 文件系统 205
11.1 文件操作 206
11.1.1 打开/关闭文件 206
11.1.2 读/写文件 208
11.1.3 删除文件 209
11.1.4 更改文件名 209
11.1.5 产生/删除文件链接 210
11.1.6 判断文件状态 212
11.1.7 读取文件中的某一行 215
11.2.1 产生/删除目录 216
11.2 目录操作 216
11.2.2 打开/关闭目录 217
11.2.3 其他目录处理函数 217
11.3 更改文件和目录的权限、所有权和时间戳 219
11.3.1 更改权限 219
11.3.2 更改所有权 220
11.3.3 更改时间戳 220
11.4 使用DBM文件 222
11.4.1 打开/关闭DBM文件 222
11.5.1 小结 223
11.5 小结与练习 223
11.4.2 DBM散列的使用 223
11.5.2 习题与思考 224
第12章 输入/输出处理 225
12.1 基本输入 226
12.1.1 来自STDIN的输入 226
12.1.2 输入操作符 227
12.1.3 @ARGV数组 227
12.2 基本输出 229
12.2.1 print函数 229
12.2.2 格式化输出函数sprintf和prinft 229
12.3.1 什么是格式 232
12.3 格式化输出 232
12.3.2 怎么定义格式 233
12.3.3 使用格式 234
12.3.4 字段容器 237
12.3.5 其他问题 240
12.4 小结与练习 241
12.4.1 小结 241
12.4.2 习题与思考 242
第13章 包和模块 243
13.1.1 包的定义 244
13.1 使用Perl包 244
13.1.2 包的引用和导入 245
13.1.3 包之间的切换 246
13.1.4 包和子程序 247
13.1.5 用包定义私有数据 247
13.1.6 访问符号表 248
13.2 使用Perl模块 250
13.2.1 创建模块 250
13.2.2 导入模块 251
13.3 Perl标准模块 257
13.2.3 模块使用举例 262
13.4.1 小结 267
13.4.2 习题与思考 267
13.4 小结与练习 267
第14章 面向对象编程 269
14.1 对象与类简介 270
14.1.1 对象的特征 270
14.1.2 对象类 270
14.1.3 对象方法 271
14.1.4 对象变量 271
14.1.5 对象引用变量 271
14.2 用Perl 5创建类 272
14.2.1 构造函数 273
14.2.2 方法 277
14.2.3 Perl类中的成员变量 281
14.2.4 析构函数 282
14.3 继承 283
14.4 方法的重载 287
14.4.1 子类方法的重载 287
14.4.2 操作符的重载 289
14.5 关于Perl面向对象编程的一些其他问题 292
14.6 小结与练习 295
14.6.1 小结 295
14.6.2 习题与思考 296
第15章 CGI编程 297
15.1 Web体系结构与CGI程序结构 298
15.1.1 Web体系结构 298
15.1.2 CGI程序结构 299
15.2 HTTP协议 303
15.2.1 HTTP通信模型 303
15.2.2 HTTP请求 304
15.2.3 HTTP响应 307
15.3 CGI规范 308
15.3.1 CGI程序工作原理 308
15.3.2 CGI方法 309
15.3.3 环境变量 311
15.4 CGI模块 314
15.4.1 使用CGI模块 314
15.4.2 创建动态文档 315
15.4.3 创建HTML元素 317
15.4.4 创建表单 321
15.5 计数器实现 331
15.5.1 设计思路 331
15.5.2 代码实现 334
15.6 留言簿实现 335
15.6.1 设计思路 335
15.7.2 习题与思考 343
15.7.1 小结 343
15.7 小结与练习 343
第16章 数据库编程 345
16.1 数据库基础 346
16.2 SQL语句 347
16.2.1 关系型数据库简介 347
16.2.2 数据类型 348
16.2.3 创建和删除表 349
16.2.4 插入数据 350
16.2.5 数据查询 351
16.2.6 修改数据 355
16.3.1 DBI与DBD 356
16.3 使用DBI 356
16.3.2 DBI编程环境的搭建与测试 357
16.3.3 句柄 360
16.3.4 连接和断开连接 361
16.3.5 数据库操作 364
16.4 DBM数据库 376
16.4.1 创建和打开DBM文件 377
16.4.2 插入和删除记录 378
16.4.3 遍历DBM数据库 379
16.5.1 小结 381
16.5.2 习题与思考 381
16.5 小结与练习 381
第17章 网络编程 383
17.1 Socket基础 384
17.1.1 Socket原理 384
17.1.2 客户端/服务器模型 385
17.2 Per对Socket的支持 388
17.2.1 和协议相关的函数 388
17.2.2 Socket底层函数 394
17.3 面向连接模型应用 399
17.3.1 服务器端的程序 400
17.3.2 客户端的程序 403
17.4 使用预编译模块 404
17.4.1 使用Net:FTP模块 405
17.4.2 使用Net:POP3模块 405
17.5 RPC的实现 406
17.5.1 Msg模块实现 406
17.5.2 Msg模块使用举例 417
17.5.3 RPC模块的实现 418
17.5.4 RPC模块使用举例 421
17.6 小结与练习 422
17.6.1 小结 422
17.6.2 习题与思考 422
附录 部分习题参考答案 423