本书提供了学习Perl最容易、最实用的方式。传奇般的硅谷编程讲师Ellie Quigley彻底更新了她的杰作,提供今天的Perl用户所需的大多数技能和信息——包括全新的MySQL数据库程序设计和旨在使经验丰富的用户更上一个台阶的Perl QuickStart。
Quigley通过有针对性的课堂测试代码示例、详细的逐行解释和真实的程序输出来阐释每种技术。本书结构清晰、通俗易懂。它可以帮助你学会从编写第一个Perl脚本开始,一直到开发数据库驱动的应用程序。它是一本你必备的Perl图书!
本版的新增内容:
完全更新的内容:
■包括许多新的、完全重写的代码示例。
■包括全面修订了CGI介绍,以利用Perl构建动态Web站点。
■涵盖了现代的Perl 5.8的概念和原理,并为Perl 6打下了极好的基础。
■三万多名系统管理员、高级用户和开发人员使用了本书的以前版本而成为专家级的Perl程序员。通过学习本书,你也可以做到这一点,即使你对Perl一无所知。在成为一名专家之后,你还将频繁地翻阅本书,因为它是可靠答案、解决方案和代码的最佳来源。
本书示例代码可在华章网站(http://hzbook.com)上下载。
Perl 程序设计语言最初是UN X 系统管理员的工具,用于处理日常的繁琐事务。时至今日,Perl已发展成一套功能齐备的程序语言,横跨所有的操作平台,其用途已不仅仅限于处理日常事务,目前已经扩展到涵盖了Web 程序设计、数据库操作、XML 处理以及系统管理等方面。
顾名思义,本书使用示例来全面介绍Perl 语言,其内容包含Perl 的所有主题。本书对每个主题都使用了示例说明,从Perl 变量、正则表达式,到编写报表、CG 脚本和网络应用,并对示例程序进行了解释。读者可以很容易地通过这些示例掌握Perl 语言的语法。附录含有完整的函数和定义、命令行开关、特殊变量、常见模块和Perl 调试器的列表,全功能的、面向对象的CG 程序,一些
有用的脚本以及很有帮助的HTML 教程。
本书不仅是一本初学者指导,而且是关于Perl 的完整指南,它包含了Perl 应用的很多方面,从正则表达式处理到格式化报表,再到进程间通信等。由于Perl 原本是为UN X 编写的,具有一些UN X 知识会大大加快学习Perl 的进程。任何读、写或只是维护Perl 程序的人都能极大地从本书受益。开发人员可以通过借鉴本书的示例来编写良好的Perl 程序,甚至可以在实际工作中直接使用本
书中的示例程序,从而大大节省了开发人员的时间,并且能有效地避免编程错误。
本书内容简洁、示例丰富,非常适合于Perl 语言初学者阅读,对于Perl 程序员,也有很大的参考价值。
参加本书翻译的人员有:陈宗斌、乔健、张景友、易小丽、陈婷、管学岗、王新彦、金惠敏、张海峰、徐晔、戴锋、张德福、张士华、张锁玲、杜明宗、高玉琢、王涛、申川、孙玲、李振国、高德杰、宫飞、侯经国、刘淑妮、张春林、李大成、程明、张路红、张淑芝、孙先国、刘冀得、梁永翔、张广东、郁琪琳、邵长凯、蒲书箴、潘曙光、刘瑞东、李军、焦敬俭、赵中元、金鑫、赵宏伟、张宏顺、尹周、王开年、贾震、陆晓萍、金国良、俞群。
由于时间紧迫,加之译者水平有限,错误在所难免,恳请广大读者批评指正。
封面图
目录
- 对Ellie Quigley 著作的赞誉
- 译者序
- 前言
- 致谢
- 第1 章实用摘要和报表语言 ………… 1
- 1.1什么是Perl …………………………… 1
- 1.2 什么是解释语言 ……………………… 2
- 1.3Perl 的用户 …………………………… 2
- 1.3.1Perl 的版本 ……………………… 3
- 1.3.2什么是Perl 6 ……………………… 3
- 1.4如何获得Perl ………………………… 4
- 1.5什么是CPAN ………………………… 7
- 1.6 Perl 文档 ……………………………… 8
- 1.6.1Perl 的man 页面 ………………… 8
- 1.6.2HTML 文档 ……………………… 9
- 1.7读者应当学到的知识 ………………… 9
- 1.8下章简介 …………………………… 10
- 第2 章Perl 快速入门 ………………… 11
- 2.1快速入门和速查手册 ……………… 11
- 2.1.1给程序员的提示 ……………… 11
- 2.1.2给非程序员的提示 …………… 11
- 2.1.3Perl 语法和结构 ……………… 11
- 2.2本章小结 …………………………… 23
- 2.3下章简介 …………………………… 23
- 第3 章Perl 脚本 ……………………… 24
- 3.1创建脚本 …………………………… 24
- 3.2脚本 ………………………………… 25
- 3.2.1启动 …………………………… 25
- 3.2.2选择文本编辑器 ……………… 26
- 目录
- 3.2.3为Perl 脚本取名 ……………… 26
- 3.2.4语句、空白和换行 …………… 27
- 3.2.5注释 …………………………… 27
- 3.2.6Perl 语句 ……………………… 28
- 3.2.7使用Perl 内建函数 …………… 28
- 3.2.8执行脚本 ……………………… 28
- 3.2.9脚本实例 ……………………… 29
- 3.2.10可能出现的错误 ……………… 30
- 3.3从命令行使用Perl ………………… 31
- 3.3.1-e 开关 ………………………… 31
- 3.3.2-n 开关 ………………………… 31
- 3.3.3-c 开关 ………………………… 33
- 3.4读者应当学到的知识 ……………… 33
- 3.5下章简介 …………………………… 34
- 第4 章获得打印句柄 ………………… 35
- 4.1文件句柄 …………………………… 35
- 4.2字(Word) ………………………… 35
- 4.3print 函数 …………………………… 35
- 4.3.1引号 …………………………… 36
- 4.3.2实量(常量) ………………… 38
- 4.3.3打印实量 ……………………… 40
- 4.3.4warning 编译指示符和
- -w 开关 ………………………… 42
- 4.3.5diagnostics 编译指示符 ……… 44
- 4.3.6strict 编译指示符 ……………… 44
- 4.4printf 函数 ………………………… 45
- 4.4.1sprintf 函数 …………………… 48
- 4.4.2无引号打印:here 文档 ……… 48
- 4.5读者应当学到的知识 ……………… 51
- 4.6下章简介 …………………………… 51
- 第5 章 变量 …………………………… 53
- 5.1 Perl 变量简介 ……………………… 53
- 5.1.1类型 …………………………… 53
- 5.1.2作用域和包 …………………… 53
- 5.1.3命名规范 ……………………… 54
- 5.1.4赋值语句 ……………………… 54
- 5.1.5引号规范 ……………………… 55
- 5.2标量、数组和散列 ………………… 59
- 5.2.1标量型变量 …………………… 59
- 5.2.2数组 …………………………… 61
- 5.2.3散列 …………………………… 67
- 5.2.4复杂数据结构 ………………… 70
- 5.3从STD N 读取输入 ……………… 72
- 5.3.1把输入内容赋值给标量型变量 … 72
- 5.3.2chop 与chomp 函数 …………… 73
- 5.3.3read 函数 ……………………… 74
- 5.3.4getc 函数 ……………………… 75
- 5.3.5将输入内容赋予数组 ………… 75
- 5.3.6将输入内容赋予散列 ………… 76
- 5.4数组函数 …………………………… 77
- 5.4.1chop 和chomp 函数
- (用于列表) …………………… 77
- 5.4.2exists 函数 …………………… 78
- 5.4.3delete 函数 …………………… 78
- 5.4.4grep 函数 ……………………… 78
- 5.4.5 join 函数 ……………………… 79
- 5.4.6map 函数 ……………………… 80
- 5.4.7pack 和unpack 函数 ………… 81
- 5.4.8pop 函数 ……………………… 82
- 5.4.9push 函数 ……………………… 83
- 5.4.10shift 函数 …………………… 83
- 5.4.11splice 函数 …………………… 84
- 5.4.12split 函数 ……………………… 85
- 5.4.13sort 函数 ……………………… 88
- 5.4.14reverse 函数 ………………… 90
- 5.4.15unshift 函数 ………………… 91
- 5.5散列(关联数组)函数 …………… 91
- 5.5.1 keys 函数 ……………………… 91
- 5.5.2values 函数 …………………… 92
- 5.5.3each 函数 ……………………… 93
- 5.5.4对散列进行排序 ……………… 93
- 5.5.5delete 函数 …………………… 98
- 5.5.6exists 函数 …………………… 99
- 5.6有关散列的更多内容 ……………… 99
- 5.6.1从文件载入散列 ……………… 99
- 5.6.2特殊散列变量 ………………… 100
- 5.6.3上下文(Context) …………… 102
- 5.7读者应当学到的知识 ……………… 103
- 5.8下章简介 …………………………… 104
- 第6 章运算符 ………………………… 106
- 6.1关于Perl 运算符 …………………… 106
- 6.2混合数据类型 ……………………… 106
- 6.3优先级和结合性 …………………… 108
- 6.3.1赋值运算符 …………………… 109
- 6.3.2关系运算符 …………………… 111
- 6.3.3相等性运算符 ………………… 113
- 6.3.4逻辑运算符(短路运算符) …… 115
- 6.3.5逻辑字运算符 ………………… 117
- 6.3.6算术运算符 …………………… 118
- 6.3.7 自动递增与自动递减运算符 … 119
- 6.3.8位逻辑运算符 ………………… 121
- 6.3.9条件运算符 …………………… 123
- 6.3.10范围运算符 …………………… 125
- 6.3.11特殊字符串运算符和函数 …… 125
- 6.3.12算术函数 ……………………… 127
- 6.4读者应当学到的知识 ……………… 130
- 6.5下章简介 …………………………… 131
- 第7 章条件 …………………………… 133
- 7.1 控制结构、块与复合语句 ………… 133
- 7.2循环 ………………………………… 138
- 7.2.1while 循环 ……………………… 138
- 7.2.2until 循环 ……………………… 139
- 7.2.3for 循环 ………………………… 141
- 7.2.4foreach 循环 …………………… 143
- 7.2.5循环控制 ……………………… 146
- 7.2.6switch 语句 …………………… 152
- 7.3读者应当学到的知识 ……………… 155
- 7.4下章简介 …………………………… 155
- 第8 章正则表达式——模式匹配 …… 156
- 8.1什么是正则表达式 ………………… 156
- 8.2表达式修饰符与简单语句 ………… 156
- 8.2.1条件修饰符 …………………… 157
- 8.2.2DATA 文件句柄 ……………… 158
- 8.2.3循环修饰符 …………………… 160
- 8.3正则表达式运算符 ………………… 161
- 8.3.1m 运算符与匹配 ……………… 162
- 8.3.2s 运算符与替换 ……………… 167
- 8.3.3模式绑定运算符 ……………… 174
- 8.4读者应当学到的知识 ……………… 179
- 8.5下章简介 …………………………… 179
- 第9 章 正则表达式元字符 ………… 181
- 9.1正则表达式元字符 ………………… 181
- 9.1.1表示单个字符的元字符 ……… 183
- 9.1.2空白元字符 …………………… 190
- 9.1.3重复模式匹配元字符 ………… 192
- 9.1.4tr 或y 函数 …………………… 213
- 9.2Unicode ……………………………… 216
- 9.3读者应当学到的知识 ……………… 218
- 9.4下章简介 …………………………… 218
- 第10 章获得文件句柄 ……………… 220
- 10.1用户定义文件句柄 ……………… 220
- 10.1.1打开文件:open 函数 ……… 220
- 10.1.2打开文件读取 ………………… 220
- 10.1.3打开文件写入 ………………… 224
- 10.1.4Win32 二进制文件 …………… 225
- 10.1.5打开文件追加 ………………… 226
- 10.1.6select 函数 …………………… 227
- 10.1.7使用flock 为文件加锁 ……… 228
- 10.1.8seek 和tell 函数 ……………… 229
- 10.1.9打开文件读写 ………………… 233
- 10.1.10打开管道 …………………… 234
- 10.2参数传递 ………………………… 239
- 10.2.1ARGV 数组 ………………… 239
- 10.2.2 ARGV 与Null 文件
- 句柄 …………………………… 241
- 10.2.3eof 函数 ……………………… 243
- 10.2.4-i 开关:原位编辑文件 ……… 245
- 10.3文件测试 ………………………… 246
- 10.4读者应当学到的知识 …………… 248
- 10.5下章简介 ………………………… 249
- 第11 章子例程与函数 ……………… 250
- 11.1子例程/ 函数 ……………………… 250
- 11.2参数传递 …………………………… 254
- 11.2.1原型 …………………………… 260
- 11.2.2返回值 ………………………… 262
- 11.2.3上下文和子例程 ……………… 263
- 11.3按引用调用 ………………………… 265
- 11.3.1符号引用- typeglob ………… 265
- 11.3.2硬引用-指针 ………………… 269
- 11.3.3自动加载 ……………………… 273
- 11.3.4BEG N 和END 子例程
- (开始与结束) ……………… 275
- 11.3.5subs 函数 ……………………… 275
- 11.4读者应当学到的知识 ……………… 276
- 11.5下章简介 …………………………… 276
- 第12 章模块化、打包并发送到库 … 278
- 12.1包和模块 ………………………… 278
- 12.1.1引言 …………………………… 278
- 12.1.2一个类比 ……………………… 278
- 12.1.3定义 …………………………… 278
- 12.1.4符号表 ………………………… 279
- 12.2标准Perl 库 ……………………… 284
- 12.2.1@ NC 数组 …………………… 284
- 12.2.2包和.pl 文件 ………………… 286
- 12.2.3模块和.pm 文件 ……………… 290
- 12.2.4导出和导入 …………………… 290
- 12.2.5如何“use”来自标准Perl 库的
- 模块 …………………………… 295
- 12.2.6使用Perl 创建自己的模块 …… 298
- 12.3来自CPAN 的模块 ……………… 299
- 12.4读者应当学到的知识 …………… 305
- 12.5下章简介 ………………………… 306
- 第13 章这项工作需要引用吗 ……… 308
- 13.1什么是引用,什么是指针 ……… 308
- 13.1.1符号引用和硬引用 …………… 308
- 13.1.2硬引用,指针 ………………… 310
- 13.1.3引用和匿名变量 ……………… 312
- 13.1.4嵌套数据结构 ………………… 313
- 13.1.5引用和子例程 ………………… 318
- 13.1.6文件句柄引用 ………………… 320
- 13.1.7ref 函数 ……………………… 321
- 13.2读者应当学到的知识 …………… 323
- 13.3下章简介 ………………………… 323
- 第14 章面向对象的Perl …………… 325
- 14.1OOP 范例 ………………………… 325
- 14.1.1回顾包与模块 ………………… 325
- 14.1.2一些面向对象的专用
- 术语 …………………………… 326
- 14.2类、对象和方法 ………………… 326
- 14.2.1现实世界 ……………………… 326
- 14.2.2步骤 …………………………… 327
- 14.2.3类和私有性 …………………… 327
- 14.2.4对象 …………………………… 328
- 14.2.5bless 函数 …………………… 330
- 14.2.6方法 …………………………… 331
- 14.2.7面向对象的模块样式 ………… 332
- 14.2.8多态性和动态绑定 …………… 341
- 14.2.9析构函数和垃圾收集 ………… 346
- 14.3匿名子例程、闭包和私有性 …… 347
- 14.3.1什么是闭包 …………………… 348
- 14.3.2闭包和对象 …………………… 349
- 14.4继承 ……………………………… 353
- 14.4.1@ SA 数组和调用方法 ……… 353
- 14.4.2$AUTOLOAD、sub AUTOLOAD
- 和UN VERSAL ……………… 355
- 14.4.3派生类 ………………………… 357
- 14.4.4多重继承 ……………………… 362
- 14.4.5重写父类方法 ………………… 362
- 14.5公共用户接口:文档类 ………… 364
- 14.5.1pod 文件 ……………………… 364
- 14.5.2pod 命令 ……………………… 365
- 14.5.3如何使用pod 解释器 ………… 366
- 14.5.4将pod 文档转译为文本 ……… 367
- 14.5.5将pod 文档转译为HTML …… 368
- 14.6使用Perl 库中的对象 …………… 368
- 14.6.1另眼看标准Perl 库 ………… 368
- 14.6.2一个来自标准Perl 库的面向
- 对象模块 ……………………… 369
- 14.6.3使用标准Perl 库中的模块 …… 371
- 14.7读者应当学到的内容 …………… 372
- 14.8下章简介 ………………………… 373
- 第15 章神奇的Tie 和DBS ………… 377
- 15.1连接变量与类 …………………… 377
- 15.1.1tie 函数 ……………………… 377
- 15.1.2预定义方法 …………………… 378
- 15.1.3连接标量 ……………………… 378
- 15.1.4连接数组 ……………………… 380
- 15.1.5连接散列 ……………………… 382
- 15.2DBM 文件 ………………………… 386
- 15.2.1创建并赋值DBM 文件 ……… 387
- 15.2.2从DBM 文件中检索数据 …… 389
- 15.2.3从DBM 文件删除项 ………… 390
- 15.3读者应当学到的知识 …………… 392
- 15.4下章简介 ………………………… 392
- 第16 章 CG 和Perl:超级活力
- 双雄 …………………………… 393
- 16.1静态和动态Web 页面 …………… 393
- 16.2工作原理 ………………………… 395
- 16.3使用HTML 创建Web 页面 ……… 399
- 16.4HTML 和CG 如何协作 ………… 403
- 16.4.1简单CG 脚本 ……………… 403
- 16.4.2错误日志文件 ………………… 405
- 16.5控制信息出入CG 脚本 ………… 406
- 16.6CG 和表单 ……………………… 409
- 16.6.1表单输入类型 ………………… 410
- 16.6.2创建HTML 表单 …………… 410
- 16.6.3GET 方法 …………………… 413
- 16.6.4处理编码数据 ………………… 416
- 16.6.5总结 …………………………… 418
- 16.6.6POST 方法 …………………… 421
- 16.6.7处理电子邮件 ………………… 424
- 16.7CG .pm 模块 ……………………… 427
- 16.7.1简介 …………………………… 427
- 16.7.2优点 …………………………… 428
- 16.7.3使用CG .pm 编程的两种形式 … 428
- 16.7.4重要警示 ……………………… 430
- 16.7.5HTML 表单方法 …………… 431
- 16.7.6CG .pm 如何处理表单 ……… 436
- 16.7.7CG .pm 表单元素 …………… 441
- 16.7.8生成表单输入字段的方法 …… 442
- 16.7.9错误处理 ……………………… 453
- 16.7.10HTTP 首部方法 …………… 455
- 第17 章 当Perl 遇见MySQL:
- 完美的连接 ………………… 460
- 17.1简介 ……………………………… 460
- 17.2什么是关系型数据库 …………… 460
- 17.2.1客户端/ 服务器型数据库 …… 461
- 17.2.2关系型数据库的组成部分 …… 462
- 17.2.3 通过SQL(结构化查询语言)
- 访问数据库 …………………… 466
- 17.3MySQL 入门 ……………………… 468
- 17.3.1为何选用MySQL …………… 468
- 17.3.2安装MySQL ………………… 468
- 17.3.3 连接MySQL ………………… 468
- 17.3.4图形化用户界面 ……………… 470
- 17.3.5寻找数据库 …………………… 472
- 17.3.6基本命令入门 ………………… 474
- 17.4什么是Perl DB …………………… 487
- 17.4.1安装DB ……………………… 488
- 17.4.2 DB 类方法 …………………… 493
- 17.4.3如何使用DB ………………… 495
- 17.4.4连接和断开数据库 …………… 495
- 17.4.5disconnect() 方法 …………… 497
- 17.4.6准备语句句柄并获取结果 …… 497
- 17.4.7处理引号 ……………………… 500
- 17.4.8获取错误消息 ………………… 501
- 17.5不返回数据的语句 ……………… 509
- 17.6事务 ……………………………… 513
- 17.7 使用CG 和DB 选择并显示
- 记录项 …………………………… 515
- 17.8还有哪些内容 …………………… 518
- 17.9读者应当学到的知识 …………… 519
- 17.10下章简介 ………………………… 520
- 第18 章与系统交互 ………………… 523
- 18.1系统调用 ………………………… 523
- 18.1.1目录和文件 …………………… 524
- 18.1.2目录和文件属性 ……………… 526
- 18.1.3查找目录和文件 ……………… 528
- 18.1.4创建目录——mkdir 函数 …… 530
- 18.1.5删除目录——rmdir 函数 …… 531
- 18.1.6更改目录——chdir 函数 …… 532
- 18.1.7通过目录文件句柄访问目录 … 533
- 18.1.8权限和所有权 ………………… 535
- 18.1.9硬链接和软链接 ……………… 538
- 18.1.10更改文件名 ………………… 541
- 18.1.11更改访问与修改时间 ……… 541
- 18.1.12文件统计量 ………………… 542
- 18.1.13底层 /O 文件 ……………… 544
- 18.1.14压缩和解压缩数据 ………… 546
- 18.2进程 ……………………………… 550
- 18.2.1UN X 进程 …………………… 551
- 18.2.2Win32 进程 …………………… 552
- 18.2.3 环境(UN X 和Windows) … 552
- 18.2.4进程和文件句柄 ……………… 554
- 18.2.5进程优先级和Nice 值 ……… 556
- 18.2.6口令信息 ……………………… 557
- 18.2.7时间和进程 …………………… 561
- 18.2.8UN X 进程创建 ……………… 564
- 18.2.9Win32 进程创建 ……………… 568
- 18.3与操作系统交互的其他途径 …… 570
- 18.3.1syscall 函数和h2ph 脚本 …… 571
- 18.3.2命令替换——反引号 ………… 572
- 18.3.3Shell.pm 模块 ………………… 572
- 18.3.4system 函数 ………………… 573
- 18.3.5here 文档 ……………………… 575
- 18.3.6 Glo b b in g ( 文件名扩展和通
- 配符) ………………………… 575
- 18.4错误处理 ………………………… 577
- 18.4.1die 函数 ……………………… 577
- 18.4.2warn 函数 …………………… 578
- 18.4.3eval 函数 ……………………… 578
- 18.5信号 ……………………………… 581
- 18.6读者应当学到的知识 …………… 584
- 18.7下章简介 ………………………… 585
- 第19 章借助形象行编写报表 ……… 586
- 19.1模板 ……………………………… 586
- 19.1.1定义模板的步骤 ……………… 586
- 19.1.2更改文件句柄 ………………… 588
- 19.1.3页眉格式 ……………………… 589
- 19.1.4select 函数 …………………… 593
- 19.1.5多行字段 ……………………… 595
- 19.1.6 填充字段 …………………… 595
- 19.1.7动态报表编写 ………………… 597
- 19.2读者应当学到的知识 …………… 598
- 19.3下章简介 ………………………… 599
- 第20 章通过网络发送 ……………… 600
- 20.1网络与Perl ………………………… 600
- 20.2客户端/ 服务器模型 ……………… 600
- 20.3网络协议(TCP/ P) ……………… 600
- 20.3.1以太网协议(硬件) ………… 600
- 20.3.2 nternet 协议( P) ………… 601
- 20.3.3传输控制协议(TCP) ……… 601
- 20.3.4用户数据报协议(UDP) …… 601
- 20.4网络寻址 ………………………… 601
- 20.4.1以太网地址 …………………… 601
- 20.4.2 P 地址 ……………………… 602
- 20.4.3端口号 ………………………… 602
- 20.4.4Perl 协议函数 ………………… 602
- 20.4.5Perl 的服务器函数 …………… 603
- 20.4.6Perl 的主机信息函数 ………… 605
- 20.5套接字 …………………………… 607
- 20.5.1套接字的类型 ………………… 607
- 20.5.2套接字域 ……………………… 607
- 20.5.3创建套接字 …………………… 608
- 20.5.4绑定地址和套接字名 ………… 609
- 20.5.5创建套接字队列 ……………… 609
- 20.5.6等待客户端请求 ……………… 609
- 20.5.7建立套接字连接 ……………… 610
- 20.5.8关闭套接字 …………………… 610
- 20.6客户端/ 服务器程序 ……………… 611
- 20.6.1 同一台计算机上面向连接的
- 套接字 ………………………… 611
- 20.6.2 远程计算机( nternet 客户端和
- 服务器)上面向连接的
- 套接字 ……………………… 614
- 20.7Socket.pm 模块 …………………… 617
- 20.8读者应当学到的知识 …………… 621
- 附录A Perl 内建函数、编译指示、
- 模块和调试器 ………………… 622
- 附录BSQL 语言入门 ………………… 654
- 附录CPerl 和生物学 ………………… 692
- 附录D 强悍与速度:CG 和
- mod_Perl ………………………… 699