第1章 概览 1
1.1 简介 1
1.1.1 关键的特性 2
1.1.3 Perl的历史和版本 3
1.1.2 支持平台 3
1.1.4 基础信息 4
1.2 构建和安装Perl 5
1.2.1 安装预构建的Perl发布版本 6
1.2.2 构建Perl源代码 8
1.2.4 用CPAN模块安装模块 12
1.2.3 构建和安装模块 12
1.3.1 启动Perl应用程序 21
1.3 运行Perl 21
1.3.2 命令行 23
1.3.3 命令行语法 24
1.3.4 Perl环境 26
1.4 小结 28
2.1 值和变量 29
第2章 基本概念 29
2.3 数据类型 30
2.2 空白区域 30
2.4 特殊变量 32
2.5 插值 33
2.6.1 标量上下文和列表上下文 34
2.6 上下文 34
2.7 操作符 35
2.6.2 空白上下文 35
2.9 控制结构 36
2.8 程序块 36
2.10 循环修饰符 38
2.11 子例程 39
2.13 作用域 40
2.12 函数 40
3.1 值转换和高速缓存 42
第3章 标量 42
3.2.1 整数 43
3.2 数字 43
3.2.2 浮点数 46
3.2.3 use integer编译指示 50
3.2.4 数学函数 51
3.3.1 引号和引用 52
3.3 字符串 52
3.3.2 here文档 54
3.3.3 裸词字符串和版本号 56
3.3.5 把字符串转换成列表和hash 58
3.3.4 把字符串转换成数字 58
3.3.6 操作字符串的函数 60
3.3.7 字符串格式化 69
3.4 小结 72
4.1 操作符与函数比较 73
第4章 操作符 73
4.2.1 赋值操作符 74
4.2 操作符类型和类别 74
4.2.2 算术操作符 75
4.2.3 移位操作符 76
4.2.4 字符串操作符和列表操作符 77
4.2.5 逻辑操作符 78
4.2.6 位操作符 79
4.2.7 组合赋值操作符 82
4.2.8 递增操作符和递减操作符 83
4.2.9 比较操作符 84
4.2.11 逗号操作符和关系操作符 86
4.2.10 正则表达式绑定操作符 86
4.2.13 箭头操作符 87
4.2.12 引用操作符和间接引用操作符 87
4.2.14 范围操作符 88
4.3 优先组和结合性 90
4.2.15 三元操作符 90
4.4 禁用函数和操作符 95
4.5 覆盖操作符 97
4.6 小结 98
5.1 列表和数组 99
第5章 标量之外的更多数据类型 99
5.1.1 操作数组 101
5.1.2 把列表和数组转换为标量 108
5.2 hash 110
5.2.1 操作 hash 112
5.2.2 把列表和数组转换为hash 114
5.2.3 把hash转换为标量 118
5.2.4 把hash转换为数组 119
5.2.5 特殊的hash变量% ENV 120
5.3 引用 124
5.4.1 嵌套带来的问题--列表被展开 132
5.4 复杂的数据结构 132
5.4.2 列表的列表和多维数组 133
5.4.3 hash的hash和其他复杂的数据结构 134
5.4.4 向复杂的数据结构添加元素和修改复杂的数据结构 135
5.4.5 编程实现复杂的数据结构 136
5.4.6 遍历复杂的数据结构 139
5.5.1 定义typeglob 142
5.5 typeglob 142
5.5.2 操作typeglob 143
5.5.3 访问typeglob 144
5.6 未定义值 145
5.6.1 存在测试 147
5.6.2 使用未定义值 148
5.6.3 把undef作为一个函数使用 149
5.7.1 使用constant编译指示声明标量常量 150
5.7 常量 150
5.7.3 常量引用 152
5.7.2 声明列表常量和hash常量 152
5.8 小结 153
5.7.4 列举和检查常量的存在 153
6.1.1 声明 155
6.1 表达式、语句和程序块 155
第6章 结构、流和控制 155
6.1.2 表达式和简单语句 156
6.1.3 程序块和复合语句 157
6.2 条件语句 162
6.2.1 真值的概念 163
6.2.2 if、else和elsif 164
6.2.3 unless 166
6.2.4 使用逻辑操作符写条件 167
6.2.5 三元操作符 168
6.2.6 开关和多分支条件 171
6.2.7 从多分支条件中返回值 173
6.3.1 使用for编写C样式的循环 174
6.3 循环和循环过程 174
6.3.2 使用foreach写出更好的循环 175
6.3.3 条件循环--while、until和do 179
6.3.4 控制循环执行 183
6.3.5 goto语句 187
6.3.6 map和grep 189
6.4 小结 191
7.1 声明子例程和调用子例程 192
第7章 子例程 192
7.1.1 匿名子例程和子例程引用 193
7.1.2 严格子例程和use strict subs编译指示 195
7.1.3 预声明子倒程 196
7.1.4 子例程栈 198
7.1.5 检查子例程和使Perl自动定义子例程 202
7.2 传递参数 204
7.2.1 传递列表和hash 206
7.2.3 直接把@_传递给子例程 208
7.2.2 把标量子例程转换为列表处理程序 208
7.2.4 命名参数 209
7.3 原型 212
7.3.1 定义参数的个数和它们的作用域 213
7.3.3 把子例程作为标量操作符 215
7.3.2 使用原型设计代码引用 215
7.3.4 请求变量而不是值 216
7.3.6 禁用原型 218
7.3.5 可选参数 218
7.4 从子例程中返回值 219
7.4.1 返回未定又值 220
7.4.2 对调用上下文的检测和响应 222
7.4.3 闭包 224
7.4.4 可赋值的子例程 226
7.5.1 定义子例程属性 227
7.5 属性列表 227
7.5.3 特殊属性 228
7.5.2 访问属性 228
7.5.4 包属性 229
7.6 小结 230
8.1.1 定义包变量 231
8.1 包变量 231
第8章 作用域和可见性 231
8.1.3 声明全局包变量 233
8.1.2 使用“严格的”变量 233
8.1.5 使用our词法声明全局包变量 234
8.1.4 使用use vars声明全局包变量 234
8.1.6 在Perl中自动局部化 235
8.1.7 使用local局部化包变量 236
8.2.1 声明词法变量 238
8.2 词法变量 238
8.2.2 在词法变量作用域外使用它们 239
8.3 符号表 240
8.3.1 main包 241
8.3.2 typeglob和main包 242
8.3.4 直接操作符号表 243
8.3.3 符号表层次 243
8.3.5 访问符号表 245
8.4 小结 246
9.1 模块和包 248
第9章 使用模块 248
9.2 使用do、require和use装载代码 249
9.2.1 导入列表 250
9.2.3 使用no禁用特性 251
9.2.2 禁止缺省导入 251
9.2.4 测试模块版本和Perl的版本 252
9.3.1 语用模块的工作原理 253
9.3 语用模块 253
9.4 特殊hash变量% INC 254
9.3.2 语用模块的作用域 254
9.5 特殊数组变量@ INC 255
9.5.1 直接修改@ INC 256
9.6 定位与脚本相关的库 257
9.5.2 使用lib编译指示修改@ INC 257
9.7 检查一个模块的可用性 258
9.8 找出被安装的模块 259
9.9 将模块的载入推迟至使用时 262
9.10 小结 264
10.1 BEGIN块、END块和其他程序块 265
第10章 模块与包内幕 265
10.1.1 BEGN块 267
10.1.3 CHECK和 INIT 269
10.1.2 END块 269
10.2 操作包 270
10.2.1 删除包 272
10.3 按程序方式查找包名 273
10.2.2 禁止包变量 273
10.4.1 自动加载子例程 274
10.4 自动加载 274
10.4.2 自行定义而不是自动加载子例程 278
10.4.3 自动加载模块 280
10.5 导入与导出 285
10.5.1 导入机制 286
10.5.2 导出 288
10.6 创建可安装的模块 299
10.6.1 编写良好的模块 300
10.6.2 创建一个工作目录 301
10.6.3 建立可安装的包 302
10.6.4 添加一个测试脚本 303
10.7 小结 304
10.6.5 将模块上载到CPAN 304
11.1.1 Perl的插值语法 306
11.1 字符串插值 306
第11章 正则表达式 306
11.1.2 插入元字符和字符代码 307
11.1.3 对变量进行插值 308
11.1.5 插值上下文 310
11.1.4 插值代码 310
11.1.6 正则表达式中的插值 311
11.1.8 保护字符串防止被插值 312
11.1.7 在字符串变量中插人文本 312
11.2 正则表达式 314
11.2.1 正则表达式出现在什么位置 315
11.2.2 正则表达式分隔符 318
11.2.3 正则表达式的元素 319
11.2.4 更高级的模式 321
11.2.5 模式匹配修饰符 330
11.2.6 正则表达式与通配符 332
11.2.7 元字符 333
11.2.8 提取匹配的文本 337
11.2.9 不止一次匹配 346
11.2.10 扩展模式 356
11.2.11 文档化正则表达式 357
11.2.12 书写有效的正则表达式 358
11.2.13 检查正则表达式的有效性 367
11.2.14 正则表达式、感染变量和调试 369
11.2.15 置换 375
11.2.16 音译 377
11.3 小结 380
12.1 10与文件句柄 381
第12章 利用文件句柄进行输入与输出 381
12.4 创建文件句柄 382
12.3 标准文件句柄 382
12.2 文件句柄数据类型 382
12.4.1 利用open函数创建文件句柄 383
12.4.2 为读、写以及更新打开文件 384
12.4.4 打开标准输入与标准输出 385
12.4.3 打开任意义件名 385
12.4.5 利用IO::File创建文件句柄 386
12.4.6 数据文件句柄 388
12.5 引用文件句柄 390
12.4.7 其他文件句柄 390
12.6.1 读行操作符 392
12.6 从文件句柄读数据 392
12.6.2 读数据操作的精细控制 395
12.6.4 读取一个字符 396
12.6.3 检测文件结束 396
12.7 向文件句柄中写数据 397
12.7.1 缓冲方式与自动刷新方式 398
12.8 处理二进制文件与文本文件 399
12.7.2 print的其他替代函数 399
12.8.2 Open编译指示 400
12.8.1 binmode函数 400
12.9.1 利用seek函数定位到文件中的某个特定位置 401
12.9 随机访问 401
12.9.2 利用Seek函数清除文件结束条件 402
12.9.3 在文件结束位置写人数据 403
12.10 截去文件与调整文件大小 404
12.9.5 面向对象的随机访问 404
12.9.4 查找当前位置 404
12.11 文件上锁 406
12.11.1 建立文件锁 407
12.12 修改缺省的输出文件句柄 409
12.11.2 文件上锁的问题与防止误解的说明 409
12.12.2 自动恢复缺省文件句柄 410
12.12.1 使用特殊变量来配置其他文件句柄 410
12.13 文件句柄的复制与别名 411
12.12.3 使用缺省变量与IO::Handle方法 411
12.14 重定向文件句柄 412
12.15 Cache多个文件句柄 414
12.16 IO::Handle方法与特殊变量 415
12.17.1 在系统级打开文件句柄 419
12.17 系统级IO 419
12.17.2 不带缓冲的读 422
12.17.3 不带缓冲的写 423
12.17.4 系统级文件定位 424
12.17.5 fcntl与ioctl 425
12.17.6 POSIX IO 429
12.18 小结 431
13.1.1 获取用户信息与组信息 432
13.1 文件与文件名 432
第13章 操作文件与目录 432
13.1.2 一元文件测试操作符 439
13.1.3 询问文件 448
13.1.4 改变文件属性 449
13.1.5 Fcntl模块 452
13.1.6 链接、断开链接与重命名文件 454
13.1.7 复制与移动文件 457
13.1.8 比较文件 459
13.1.9 查找文件 460
13.1.10 解释文件路径 465
13.1.11 文件名globbing 466
13.1.12 glob语法 467
13.1.13 临时文件 471
13.2 操作目录 475
13.2.1 读目录 476
13.2.2 创建与删除目录 480
13.2.3 目录间的转移 483
13.3 小结 485
14.1.1 命令行约定 486
14.1 解析命令行参数 486
第14章 命令行与Shell交互 486
14.1.2 @ARGV数组 487
14.1.3 利用Getopt::Std进行简单的命令行处理 493
14.1.4 利用Cetop::tong进行更为复杂的命令行处理 496
14.2 shell、shell命令与Perl 512
14.2.1 创建一个简单的 Perl shell 512
14.2.2 编写更为有用的shell 513
14.2.3 将shell集成到Perl中 516
14.2.4 在Windows系统上模拟UNIX命令 518
14.3 小结 520
15.1 与终端进行交互 521
第15章 终端输入与输出 521
15.2 从键盘读取数据 522
15.2.2 利用Term:: ReadKey控制终端输入 523
15.2.1 简单输入 523
15.2.3 整行读 528
15.2.4 利用Term:: ReadLine进行高级行输入 535
15.2.5 创建终端对象 536
15.2.6 单词自动完成 540
15.3 写屏幕 541
15.3.1 终端功能 542
15.3.2 彩色输出 545
15.4.1 Term::Screen 549
15.4 高级终端模块 549
15.4.2 Curses库 551
15.5 通过POSIX直接进行终端编程 556
15.6 小结 558
16.1 启用警告 559
第16章 警告与错误 559
16.2 启用诊断 560
16.3 产生警告与错误 562
16.4 截取警告与错误 563
16.5.1 错误编号与名称 564
16.5 译解系统调用所产生的错误结果 564
16.5.3 求值代码的错误 565
16.5.2 设置错误编号 565
16.5.4 扩展的错误消息 566
16.5.6 检查子进程与外部命令的退出状态 567
16.5.5 Errno与POSIX模块 567
16.6 将非致命错误转换成致命错误 568
16.7 利用Carp在上下文中返回警告信息与错误信息 569
16.8 错误日志与系统日志 571
16.9 高级警告 572
16.10 小结 574
17.1 语用调试支持 575
第17章 调试 575
17.2.1 一个简单的调试系统 576
17.2 自行调试的应用程序 576
17.2.2 一个更好的调试系统 577
17.2.3 创建调试日志 578
17.2.4 添加调用上下文到调试消息中 579
17.3.1 启动调试器 580
17.3 Perl调试器 580
17.3.2 输入命令 581
17.3.3 调试命令 584
17.3.4 配置调试器 594
17.3.5 跟踪与终端 599
17.3.6 通过程序进入调试器 600
17.3.7 对使用调试器异常分支 601
17.4 调试模块与信息模块 603
17.4.1 Dumpvalue模块 604
17.4.2 Safe模块 606
17.5 调试Perl解释器 609
17.6 自动测试 610
17.6.1 编写测试脚本 611
17.6.2 自动化测试 613
17.7 Profele 614
17.7.2 产生Profile报告 615
17.7.1 Profile Perl应用程序 615
17.7.3 直接收集计时信息 619
17.7.4 性能测试 621
17.8 小结 627
18.1 文本处理 628
第18章 文本处理与文档生风 628
18.1.1 使用Text::Tabs扩充和缩短制表符 629
18.1.2 使用Text::Abbrev计算缩写 630
18.1.3 使用Text::ParseWords解析单词和短语 632
18.1.4 使用Text::Wrap格式化段落 635
18.1.5 使用Text::Soundex匹配近似的发声单词 638
18.2.2 简易老式文档 641
18.2.1 注释 641
18.1.6 其他文本处理模块 641
18.2 文档化Perl 641
18.2.3 pod工具和实用程序 647
18.2.4 对pod编程 650
18.3.1 格式与格式数据类型 655
18.3 报告--在Perl中的r 655
18.3.2 格式结构 659
18.3.3 负面控制 665
18.3.4 组合报告和规则输出 668
18.4 小结 670
19.1 对象简介 672
第19章 面向对象Perl 672
19.2.2 使用对象 676
19.2.1 创建对象 676
19.2 使用对象编程 676
19.2.4 确定通过继承得到的特征 679
19.2.3 确定一个对象是什么 679
19.3.1 构造器 681
19.3 编写对象类 681
19.3.2 调试对象类 701
19.4.1 从父类继承 707
19.4 继承与派生类 707
19.4.2 编写可继承的类 709
19.4.3 私有方法 713
19.4.4 扩展与重定义对象 714
19.4.5 多继承 717
19.4.6 UNIVERSAL构造器 721
19.5 自动加载方法 726
19.6.1 私有类数据 730
19.6 保持数据私有 730
19.6.2 私有对象数据 731
19.7 销毁对象 734
19.7.1 析构器和继承 735
19.7.2 析构器与多继承 736
19.8.1 基本重载 737
19.8 重载操作符 737
19.8.3 重载比较操作符 739
19.8.2 确定操作数顺序和操作符名称 739
19.8.4 重载转换操作 740
19.8.5 回退到末重载的操作 743
19.8.7 自动生成的操作 745
19.8.6 重载与继承 745
19.9 自动化对象类开发 747
19.8.8 可重载的操作 747
19.10.1 使用被捆绑的对象 751
19.10 捆绑和被捆绑的对象 751
19.10.3 标准捆绑对象类 754
19.10.2 编写被捆绑的对象 754
19.10.4 被捆绑的对象方法 755
19.10.5 被捆绑的hash类的一个例子 758
19.10.6 使用Tie::StdHash的类的一个例子 760
19.11 小结 762
20.1.1 perl-V 764
20.1 分析Peil二进制文件--Config.pm 764
第20章 深入hd 764
20.1.2 工作原理 765
20.2.1 源文件树 767
20.2 Perl进一步分析 767
20.2.2 构建Perl 769
20.3.1 语法分析 770
20.3 Perl工作原理 770
20.3.2 编译 772
20.3.3 解释 773
20.4 内部变量类型 774
20.4.2 IV 775
20.4.1 PV 775
20.4.3 NV 776
20.4.5 使用Devel::Peek分析原始数据类型 777
20.4.4 数组与hash 777
20.5 Perl编译器 780
20.5.2 B模块 781
20.5.1 O模块 781
20.5.3 B:模块家族 783
20.5.4 编写Perl编译器后端 796
20.6 小结 799
21.1 在Perl中使用C 800
第21章 Perl与其他程序设计语言的集成 800
21.1.1 XS概述 801
21.1.2 从h2xs启动 802
21.1.3 XS文件 804
21.1.4 XS函数 806
21.1.5 TYPEMAP 811
21.1.6 Makefile 814
21.2 动态链接 815
21.2.1 使用FFI模块 816
21.2.3 使用Win32::API模块 818
21.2.2 使用C:DynaLib模块 818
21.3.1 第一步 819
21.3 在C中使用Perl 819
21.3.2 实现Perl解释器 821
21.3.3 嵌入perl代码 823
21.3.4 得到Perl值 824
21.3.5 使用Perl子例程 826
21.3.6 与Perl内核协同工作 828
21.3.7 使用模块 829
21.4 Java-Perl Lingo 831
21.5.1 PerlCOM 832
21.5 Perl与 COM 832
21.5.2 PerlCtrl 833
21.6 其他语言 834
21.7 小结 836
22.1 信号 837
第22章 创建过程与管理进程 837
22.1.1 信号处理 839
22.1.3 报警 846
22.1.2 发送信号 846
22.2 启动新进程 848
22.2.1 替换当前进程 849
22.2.3 进程、组及端口监控程序 850
22.2.2 进程ID 850
22.3.2 获得退出状态 852
22.3.1 等待一个子进程 852
22.3 处理子进程并返回退出代码 852
22.3.3 处理多个子进程 853
22.3.4 POSIX标志及函数 855
22.4.1 十分简单的解决方法 856
22.4 进程间通信 856
22.4.2 管道 857
22.4.3 打开并运行外部进程 859
22.4.4 双向管道 860
22.4.5 使用分叉的open避开shell 862
22.4.6 连接外部进程的双向管道 863
22.5 进程间共享数据 865
22.5.1 IPC::SysV 866
22.5.2 消息队列 867
22.5.3 信号量 870
22.5.4 共享内存段 873
22.6 线程 875
22.6.2 创建线程 876
22.6.1 检查线程支持 876
22.6.4 线程特定数据 877
22.6.3 标识线程 877
22.6.5 线程管理 878
22.6.7 条件变量、信号量及队列 880
22.6.6 变量锁 880
22.7 小结 890
22.6.8 线程安全与锁定代码 890
23.1.1 协议层 891
23.1 网络简介 891
第23章 Perl网络编程 891
23.1.2 网际协议 893
23.1.3 UDPWP 896
23.1.7 匿名、广播与回送地址 898
23.1.6 表示层/应用层 898
23.1.4 ICMP 898
23.1.5 其他协议 898
23.2 Perl网络编程 899
23.3 多路复用服务器 921
23.4.1 系统网络文件 928
23.4 获得网络信息 928
23.4.2 判断本地主机名 939
23.5 小结 940
24.2 新行 942
24.1 可移植的必要性 942
第24章 编写可移植Perl 942
24.3 文件与文件系统 945
24.5 系统交互 949
24.4 字节存放次序与数字宽度 949
24.6 进程间通信 950
24.8 模块 951
24.7 外部子例程 951
24.10 字符集与字符编码 952
24.9 时间及日期 952
24.14 风格 953
24.13 安全性 953
24.11 国际化 953
24.12 系统资源 953
24.15 平台 956
24.15.2 DOS及其派生系统 957
24.15.1 UNIX 957
24.15.3 Mac OS 958
24.15.4 其他Perl 959
24.16 函数实现 960
24.17 小结 964
25.3 字符和Unicode简介 965
25.2 结论 965
第25章 Unicode 965
25.1 Unicede所影响的用户群 965
25.4 Perl中的数据 968
25.5 Unicode和正则表达式 969
25.6 双向脚本 972
25.6.1 显示bidi 973
25.6.2 bidi算法做了什么 974
25.6.3 Perl和 bidi 975
25.7 Perl、118n和Unicode 976
25.7.3 创建HTML模板 977
25.7.2 安装Unicode编辑器 977
25.7.1 安装Unicode字体 977
25.7.4 处理资源文件 978
25.7.6 输出文件 979
25.7.5 运行脚本 979
25.8 小结 981
25.7.7 正在进行的工作 981
第26章 本地化和国际化 982
26.1 走向地区的原因 983
26.2 关于时间:时区 995
26.3 看上去像外语 997
26.4 葡萄牙语的词性变化 999
26.5 Lingua::*模块 1001
26.6 编写多语种网页 1005
26.7 创建自己的本地化Perl模块 1009
26.8 小结 1011
附录A 命令行选项 1012
附录B 特殊变量 1014
附录C 函数 1020
附录D 正则表达式 1036
附录E 标准语用模块 1041
附录F 标准功能模块 1043
附录G Perl资源 1050
附录H 与本书相关的网站:p2p.wrox.com 1052