第1部分 Perl编程基础 1
第1章Perl的背景 1
1.1版本和命名协定 1
1.1.1 Perl、perl还是PeRL 2
1.1.2 Perl5.6之前的各种Perl版本 2
1.2 Perl的历史 2
1.3 Perl的主要特点 2
1.3.1免费 3
1.3.2简单易学、简明易读 3
1.3.3快速高效 3
1.3.4可扩展性 3
1.3.5灵活的数据类型 4
1.3.6面向对象 4
1.3.7交流协作 4
1.4编译器或解释器 4
1.5与Perl类似的语言 4
1.5.1UNIX Shell 5
1.5.2 Tcl 5
1.5.3 Python 5
1.5.4 Java 6
1.5.5 C/C++ 6
1.5.6 awk/gawk 6
1.6关于Perl的误区 7
1.7 Perl的成功业绩 8
第2章Perl概述 9
2.1安装及使用Perl 9
2.1.1编写一个Perl脚本 10
2.1.2UNIX下的Perl 10
2.1.3Windows下的Perl 12
2.1.4 Mac OS下的Perl 15
2.2 Perl中的组件 18
2.2.1变量 18
2.2.2操作符 19
2.2.3语句 19
2.2.4子程序(函数) 19
2.2.5模块 20
2.3接下去如何使用本书 20
第3章Perl解析规则 21
3.1 脚本执行过程 21
3.2语法和解析规则 21
3.2.1基本语法 22
3.2.2注释语句 23
3.2.3组件确认 24
3.2.4操作符和优先级 25
3.2.5独立词 37
3.2.6上下文 38
3.2.7逻辑值 39
3.3 Perl的代码体系 39
第4章 变量和数据 41
4.1基本命名规则 41
4.2 标量变量 42
4.3字面量 42
4.3.1数字字面量 42
4.3.2字符串字面量 43
4.3.3字符串引用 45
4.3.4数组的内插 46
4.3.5 本地文档 46
4.3.6 V-字符串 47
4.4数组 48
4.5哈希结构 50
4.6 列表 53
4.7类型标识(Typeglobs) 55
4.8被定义的函数和未定义值 55
4.9默认值 56
4.10其他标记 56
4.11特殊变量 56
第5章 语句和控制结构 65
5.1代码块 65
5.2条件语句 65
5.3循环语句 68
5.3.1 while循环 68
5.3.2 until循环 68
5.3.3 for循环 69
5.3.4 foreach循环 69
5.3.5 continue块 70
5.3.6 标签 70
5.3.7 循环控制 71
5.3.8非限定块 72
5.3.9 goto语句 73
第6章 子程序、包和模块 74
6.1 函数 74
6.1.1 参数 76
6.1.2返回值 82
6.1.3 错误通告 83
6.1.4上下文 83
6.1.5 属性 84
6.1.6 原型 85
6.2 包 86
6.2.1 包符号表 88
6.3特殊块 88
6.4模块 89
6.4.1建立模块 90
6.4.2 Exporter模块 91
6.4.3 use和require的比较 91
6.4.4 no语句 93
6.4.5 do语句 93
6.5作用域 93
6.5.1“my”的效果 94
6.5.2“local”的效果 95
6.5.3“our”的效果 95
6.5.4循环中的作用域 96
6.6自动装载 96
第7章 文件操作 98
7.1 文件句柄 98
7.1.1打开和关闭文件 99
7.1.2输入/输出句柄 104
7.1.3文件定位 109
7.1.4混合控制函数 110
7.2 文件管理 112
7.2.1文件信息 112
7.2.2 基本的文件管理 116
7.2.3目录访问 118
7.2.4管理目录 120
7.2.5 使用fcntl函数进行文件的控制 122
7.2.6 通过ioctl函数进行I/O控制 122
7.2.7 select函数 123
7.2.8 文件加锁 125
第8章 数据操作 127
8.1数字处理 127
8.1.1 abs——绝对值 127
8.1.2 int——将浮点数转换为整数 127
8.1.3 exp——e为底的乘方 128
8.1.4 sqrt——开方运算 128
8.1.5 log——对数函数 128
8.1.6三角函数 128
8.1.7 进制转换 129
8.1.8 字符和数字之间的转换 129
8.1.9随机数 130
8.1.10 小整数的操作 131
8.2 字符串操作 131
8.2.1字符串连接 131
8.2.2 字符串长度 132
8.2.3 改变字符大小写 132
8.2.4行结束字符的消除 132
8.2.5 字符串定位 133
8.2.6提取子串 133
8.2.7 栈 134
8.2.8 数组切片 135
8.2.9 join函数 136
8.2.10 split函数 137
8.2.11 grep函数 138
8.2.12 map函数 138
8.2.13 sort函数 139
8.2.14 reverse 140
8.3正则表达式 140
8.3.1模式修饰符 141
8.3.2匹配操作符 142
8.3.3替换操作符 143
8.3.4转换 145
8.3.5正则表达式的元素 147
8.3.6 正则表达式变量 156
8.3.7正则表达式扩展名/断言 157
8.3.8预编译表达式 158
8.3.9 正则表达式的支持函数 159
8.4 Unicode 160
8.4.1 Perl对于Unicode的解释 161
8.4.2 Perl中的Unicode字符 161
8.4.3 Unicode作用于Perl的效果 162
第9章 错误和捕获错误 163
9.1 在脚本中加入错误确认的代码 163
9.1.1 错误确认方法 163
9.1.2错误确认方针 164
9.2 什么是要确认的错误 165
9.3什么是不需要确认的错误 165
9.4什么时候停止确认 166
9.4.1尽量避免画蛇添足 166
9.4.2函数、返回值和内嵌结构 167
9.5 表示错误的信息和数字 168
9.6 在脚本中报告错误 169
9.6.1Warn函数 169
9.6.2 Die函数 169
9.6.3 指示和标记 170
9.7在模块中进行报错 170
9.7.1 Carp函数 171
9.7.2 Cluck函数 171
9.7.3 Croak函数 171
9.7.4 Confess函数 172
第2部分 使用Perl编程 173
第10章 复杂数据结构 173
10.1访问打包的数据结构 173
10.2引用 176
10.2.1建立硬引用 177
10.2.2反引用 179
10.2.3判断引用中的数据类型 181
10.2.4 软引用 182
10.3 复杂结构 182
10.3.1 二维数组 183
10.3.2 二维哈希结构 186
10.3.3哈希结构的数组 189
10.3.4 数组的哈希结构 191
10.3.5 多于二维的结构 193
10.4 对象 195
10.4.1 关于对象的基础知识 195
10.4.2 建立和使用对象 196
10.4.3 对象方法 197
10.4.4 类和类的继承 200
10.4.5 析构函数和垃圾收集 200
10.4.6 Perl中对象结构同其他语言的比较 201
10.5 使用捆绑 201
10.5.1建立新的捆绑类 202
第11章 系统信息 206
11.1 用户和用户组 206
11.1.1 获取UNIX的Password 206
11.1.2获得UNIX的用户组 208
11.1.3 Password加密 208
11.2 Time 209
11.2.1gmtime和localtime 209
11.2.2 Time函数 210
11.2.3 时间值比较 210
11.2.4 将日期和时间转换为起始时间值 210
11.2.5 时间算法 211
11.2.6 times函数 213
11.2.7 sleep函数 214
11.2.8 Alarms 214
11.3 环境变量 215
第12章 网络 218
12.1 获得网络信息 219
12.1.1主机 219
12.1.2协议 220
12.1.3服务 221
12.1.4网络 221
12.2 套接字模块 222
12.2.1地址解析和转换 222
12.2.2地址常量 222
12.2.3套接字结构 223
12.2.4行结束常量 223
12.3 利用套接字进行通信 223
12.3.1 连接远端套接字 223
12.3.2 监听套接字连接信息 226
12.4 使用IO::Socket 231
12.4.1 客户端 232
12.4.2服务器端 232
12.4.3使用IO::Socket和IO::Select 232
12.4.4 获取套接字地址 234
12.4.5 关闭套接字 234
12.4.6 套接字选项 235
12.4.7 数据传递 235
12.5 Graham Barr的libnet包族 236
12.6 Gisle Aas的LWP包族 238
第13章 数据库系统 240
13.1 文本数据库 241
13.1.1 限定数据库 242
13.1.2固定长度的记录 242
13.2 DBM数据库 245
13.2.1 DBM的实现 246
13.2.2 DBM函数 247
13.2.3 使用捆绑DBM数据库 248
13.2.4 在DBM各种格式之间转换 250
13.2.5 使用AnyDBM_File 251
13.2.6 GDBM的特性 251
13.2.7 Berkeley DB特性 252
13.2.8在DBM数据库中存放复杂的数据 256
13.2.9 DBM中的关系型数据库 259
13.3 数据库的文件锁定 260
13.4 使用DBI和Win32::ODBC工具集 261
13.4.1 DBI 262
13.4.2 Win32::ODBC 262
13.4.3 数据库机制和兼容 263
13.4.4 数据库连接 263
13.4.5执行简单查询 264
13.4.6 执行扩展查询 265
13.4.7关闭数据库连接 266
13.4.8确认错误 266
13.5 复习SQL语言 267
13.5.1SQL语句 268
第14章 进程间通信 274
14.1 进程 274
14.1.1 控制Perl运行 274
14.1.2 进程信息 275
14.1.3 进程组 275
14.1.4进程优先级 275
14.2 信号 276
14.2.1 信号句柄 277
14.2.2 _WARN_和_DIE_信号 279
14.2.3 发送信号 281
14.3 管道 281
14.3.1匿名管道 281
14.3.2双向通信 282
14.3.3 命名管道 282
14.3.4 Windows 下的命名管道 284
14.3.5 安全管道 286
14.4 执行附加进程 287
14.4.1 运行其他程序 287
14.4.2 替换当前脚本 288
14.4.3 建立子进程 288
14.5 其他的函数调用 293
14.6 system V IPC 294
第15章 其他运行方法 295
15.1 以命令行形式执行Perl 295
15.1.1特殊操作 300
15.2 Perl的环境变量 301
15.3 Perl in Perl(eval) 302
15.3.1使用eval EXPR 302
15.3.2 使用eval BLOCK 303
15.3.3 捕捉意外情况 303
15.3.4 返回信息 303
15.3.5 eval和_DIE_信号句柄 303
15.4 线程 304
15.4.1 多任务如何实现 304
15.4.2从多任务到多线程 305
15.4.3 线程和多进程的比较 306
15.4.4线程和select ( )函数的区别 306
15.4.5 线程和Perl 306
15.4.6创建一个新线程 306
15.4.7通过匿名者函数建立线程 307
15.4.8线程控制 307
15.4.9 变量控制 308
15.4.10 队列 309
15.4.11 标志(semaphore) 309
15.4.12 信号 309
15.5 安全性 310
15.5.1 使用Taint模式 310
15.5.2 safe模块和opcode模块 312
第3部分 开发应用 315
第16章 用户界面工具 315
16.1 处理命令行参数 315
16.1.1Getopt::std 316
16.1.2 Getopt::Long 317
16.2 Perl输出显示机制 319
16.2.1 标题和脚注 322
16.2.2 格式函数 322
16.2.3 格式变量 323
第17章 高级用户界面 324
17.1 终端中的一些处理 324
17.2 使用TK 325
17.2.1 在UNIX下安装TK 326
17.2.2在Windows 下安装TK 326
17.2.3接触TK 326
17.2.4事件循环 328
17.2.5部件 330
17.2.6控制窗口位置大小 344
17.2.7简化处理 347
第18章 Web中的Perl 353
18.1 HTML 353
18.2 统一资源定位符URL 354
18.3 Web操作浏览 354
18.4 环境 355
18.5 通用网关接口(CGI) 358
18.5.1 数据提取 359
18.5.2 返回相关的数据到用户浏览器中 361
18.5.3文档主体 364
18.6 Web编程 364
18.7CGI模块 365
18.7.1cookies 368
18.8 解析HTML 369
18.9 解析XML 370
18.10 调试程序 373
18.11 安全性 374
第19章 通过标记控制Perl的执行 377
19.1 告警 377
19.2$^W变量 378
19.3以前Perl版本中的warnings标记 378
19.4 Perl5.6中的词法告警 379
19.5 strict标记 382
19.5.1 vars选项 383
19.5.2 refs选项 384
19.5.3 subs选项 385
19.6 其他Perl标记 385
19.6.1 attributes标记 386
19.6.2 autouse标记 386
19.6.3 base标记 387
19.6.4 blib标记 387
19.6.5 bytes 标记 387
19.6.6 charnames标记 388
19.6.7 constant标记 388
19.6.8 diagnostics标记 389
19.6.9 field标记 390
19.6.10 integer 391
19.6.11less 391
19.6.12 lib 391
19.6.13 locale 392
19.6.14 open 392
19.6.15 ops 392
19.6.16 overload 392
19.6.17 re 393
19.6.18 sigtrap 393
19.6.19 subs 394
19.6.20 vars 394
第20章 扩展和嵌入Perl 395
20.1 Perl的内核 395
20.1.1 Perl体系结构 396
20.1.2 内部对象 396
20.1.3翻译器 397
20.1.4操作码 397
20.1.5编译 400
20.1.6执行 401
20.2 Perl的内部结构 402
20.2.1 变量 402
20.2.2 栈 406
20.2.3 栈的大小 411
20.2.4 Perl内核的归纳 411
20.3 Perl的扩展编程 411
20.3.1 Perl的扩展接口 411
20.3.2 XS简介 412
20.3.3 SWIG简介 412
20.3.4 使用XS 413
20.4 在其他语言中使用Perl 434
20.4.1内嵌Perl解释器 435
20.4.2 使用特定的函数 436
20.4.3 多个实例 438
20.4.4 XS初始化过程 439
20.5 同其他语言配合使用 439
20.5.1 将其他语言转换成Perl 439
20.5.2 将Perl转换成其他语言 443
20.5.3 在Perl中调用其他语言 443
第21章 调试程序和优化代码 445
21.1 调试技术 446
21.1.1 使用Print语句 446
21.1.2 使用 caller 448
21.1.3 使用eval函数 450
21.1.4编写日志 452
21.1.5向syslog报告调试信息 453
21.1.6向Windows NT/2000事件日志报告调试信息 454
21.2 使用调试器 454
21.2.1 watches 监控 454
21.2.2 步进 454
21.2.3 断点 455
21.2.4 Perl调试器 455
21.2.5 ActivePerl调试器 465
21.3 Perl和其他语言的差别 466
21.3.1 Perl和awk/gawk的差别 466
21.3.2 Perl和C之间容易混淆的地方 467
21.3.3 Perl和sed之间容易混淆的地方 469
21.3.4 Perl和emacs之间容易混淆的地方 469
21.3.5 Shell和Perl之间容易混淆的地方 469
21.3.6 Perl和Python之间容易混淆的地方 469
21.4 代码优化 471
21.4.1 Perl Profiler 471
21.4.2手工Profiling 475
21.4.3 优化代码时要注意的地方 476
第22章Perl编译器 481
22.1 使用转储功能 482
22.2 使用Perl编译器 483
22.2.1 后端 483
22.2.2 perlcc前端 492
22.2.3 解释代码和编译代码之间的区别 494
22.3 速度比较 495
22.3.1 测试 495
22.3.2概括结果 498
第23章Perl的文档 500
23.1 使用Perl提供的文档 500
23.1.1 UNIX 503
23.1.2 Windows 503
23.1.3 Mac OS/Mac OS X 503
23.2 编写POD文档 506
23.2.1 POD组件 506
23.2.2 命令段落 506
23.2.3 一般文本段落 507
23.2.4 Verbatim段落 508
23.2.5 转义序列 508
23.2.6 嵌入文档 508
23.3 将POD转换成其他格式 509
23.3.1 文本(TEXT) 510
23.3.2 HTML 510
23.3.3 man page 510
23.3.4 PostScript/PDF 511
23.3.5 通过自己编写的脚本将POD转换成HTML 512
第24章Perl中跨平台使用的问题 513
24.1 函数支持 513
24.2 常量的跨平台兼容 514
24.3 执行环境 514
24.4 错误报告 514
24.5 行结束符 514
24.6字符集 515
24.7 数据差别 515
24.8 文件和文件路径 515
24.9模块 516
24.10 性能和资源 516
24.11 跨系统使用Perl的一些技巧 516
24.11.1 判断当前的操作系统 516
24.11.2判断Perl版本 517
24.11.3检验所支持的函数 518
24.11.4 函数重载 518
第25章 发布模块和应用程序 520
25.1 Perl Makefile 和Extutils::MakeMaker 520
25.1.1 Perl Makefiles和CPAN 521
25.1.2 Perl Makefiles和PPM 521
25.1.3 扩展程序建立和安装概述 521
25.1.4 MakeMaker概述 523
25.1.5 h2xs工具 524
25.1.6 MakeMaker配置选项 524
25.1.7 创建一个伪程序描述文件 528
25.1.8默认的程序描述文件目标 529
25.1.9创建一个新的Perl 二进制可执行文件 529
25.1.10 Package Builder的目标 530
25.2 MakeMaker的一些技巧 532
25.2.1 确定先决条件 532
25.3向CPAN提供打包的模块 535
25.4向PPM/VPM提供打包的模块 535
附录A 参考函数 537
附录B标准Perl库 618
附录C 资源 704