第 1 页 共 63 页
Perl 学习笔记
廖海仁
2010 年5 月
第 2 页 共 63 页
目 录
1. Perl 简介...........................................................................................................................4
2. 数据类型...........................................................................................................................5
2.1 概览.............................................................................................................................5
2.2 命名空间(Namespaces) ..............................................................................................5
2.3 标量(Scalars) ..............................................................................................................6
2.4 数组(Arrays) ...............................................................................................................9
2.5 关联数组(Hashes).....................................................................................................12
2.6 引用(References) ......................................................................................................13
2.6.1 Perl 引用简介................................................................................................13
2.6.2 创建引用.......................................................................................................13
2.6.3 使用引用.......................................................................................................14
2.6.4 符号引用.......................................................................................................15
2.6.5 垃圾回收与弱引用.......................................................................................16
2.7 数据结构.............................................................................................................16
2.7.1 Arrays of Arrays..........................................................................................17
2.7.2 Hash of Arrays.............................................................................................19
2.7.3 Arrays of Hashes.........................................................................................21
2.7.4 Hashes of Hashes ........................................................................................23
2.7.5 Hashes of Functions ....................................................................................25
3 操作符(Operators)..........................................................................................................25
3.1 概述..........................................................................................................................25
3.2 Perl 操作符一览.......................................................................................................26
3.3 各种操作符使用说明..............................................................................................27
3.3.1 项与左赋列表操作符...................................................................................27
3.3.2 箭头操作符...................................................................................................28
3.3.3 自增自减.......................................................................................................28
3.3.4 乘方...............................................................................................................28
3.3.5 表意一元操作符...........................................................................................28
3.3.6 捆绑操作符...................................................................................................29
3.3.7 乘操作符.......................................................................................................29
3.3.8 加操作符.......................................................................................................29
3.3.9 移位操作符...................................................................................................29
3.3.9 有名一元和文件测试操作符.......................................................................30
3.3.10 关系操作符.................................................................................................31
3.3.11 位操作符.....................................................................................................32
3.3.12 C 风格逻辑操作符......................................................................................32
3.3.13 范围操作符.................................................................................................32
3.3.14 条件操作符.................................................................................................32
3.3.14 赋值操作符.................................................................................................33
3.3.15 逗号操作符.................................................................................................33
3.3.16 逻辑and, or, not 和xor 操作符..................................................................33
3.4 与C 操作符的比较.................................................................................................34
3.4.1 Perl 操作符的特别之处................................................................................34
第 3 页 共 63 页
3.4.1 C 有Perl 没有的操作符................................................................................34
4. 语句.................................................................................................................................34
4.1 简单语句...................................................................................................................34
4.2 复合语句...................................................................................................................35
4.2.1 条件语句(if/unless 语句)..............................................................................35
4.2.2 循环语句(while/until/for/foreach 语句) ....................................................36
4.2.3 分支语句....................................................................................................38
5. 子程序(函数).............................................................................................................39
5.1 子程序简介...............................................................................................................39
5.2 函数原型与属性......................................................................................................41
5.3 Perl 内部函数...........................................................................................................42
6. 文件、目录与I/O .............................................................................................................43
6.1 文件操作..................................................................................................................43
6.2 目录操作.................................................................................................................44
6.3 print/printf.........................................................................................................45
6.4 注意事项.................................................................................................................45
7. 模式匹配.........................................................................................................................46
7.1 模式匹配操作符简介...............................................................................................46
7.2 模式修饰符...............................................................................................................48
7.3 模式匹配操作符详解...............................................................................................49
7.3.1 m//操作符(匹配)............................................................................................49
7.3.2 s///操作符(替换) ............................................................................................50
7.3.3 tr///操作符(字译) ...........................................................................................52
7.4 元字符.......................................................................................................................52
7.5 常见问题的正则解决方案.......................................................................................56
8. 面向对象编程.................................................................................................................56
8.1 模块使用...................................................................................................................56
8.2 对象使用...................................................................................................................57
9.Perl 特殊变量...................................................................................................................58
10 Perl 程序文档(POD)..................................................................................................60
11. Perl 编程风格...........................................................................................................61
12. 参考文献..................................................................................................................63
第 4 页 共 63 页
1. Perl 简介
Perl 一般被认为是Practical Extraction and Report Language(实用获取与报表语言)的缩写,是
由C 以及sed、awk、Unix shell 及其它语言演化而来的一种语言。它由语言学家Larry Wall
最初发明及实现。Perl 是一种为扫描任意的文本文件,从这些文本文件中获取信息,基于这
些信息打印报表而优化的语言。它也很适合于完成许多系统管理的任务。Perl 是一种粘合性
语言,旨在实用(易用、高效、完整)而不是漂亮(优美、小巧)。其吉祥物是骆驼,取其
虽并不漂亮却任劳任怨、能干活之特点。
Perl 不随意限制数据的大小,只要你有充足的内存。递归的深度也不受限制。关联数组使用
可以根据需要扩展以避免性能衰退。Perl 能利用复杂的模式匹配技巧来快速扫描大量数据。
尽管善于处理文本,Perl 也能处理二进制数据。
Perl 5 增加了模块化处理、面向对象编程、引进引用以处理多维数组等复杂的数据结构、
Unicode 支持、多线程支持等功能,使得Perl 成为一种更加完备强大的语言。
Perl 语言的座右铭是:There’s More Than One Way To Do It (TMTOWTDI,有多种方法可以
完成一件事,或者“条条道路通北京”)。Perl 是一种自然和智能语言,它能根据上下文环
境解释执行,同时有大量省略写法。
如果你通常想使用sed、awk 或sh 来解决的问题,但是却发现它们的能力不够,或者想运行
得更快一点,却不想傻傻地用C 来写,Perl 将是很好的选择。Perl 擅长于文本处理和系统管
理,不适合于实时嵌入式系统编程、操作系统底层开发(比如驱动程序开发)、复杂的多线
性共享内存应用以及极度大的应用。
Perl 语言的长处:
强大的正则表达式和模式匹配功能(接近理想的正则表达式语言)
复杂灵活的数据结构(Array of Array, Array of Hash,Hash of Array, Hash of Hash 等)
Unicode 支持(相对AWK 与C)
其不足是:
动态类型语言,不是很可靠
自然语言,是优点也是缺陷,使得Perl 语言代码可能晦涩难懂;
智能语言,是优点也产生不足:根据上下文解释编程者之意,可能产生臆断;也因
此产生种种编程陷阱。
不是很优美。多种方法做事,有时会让编程者无所适从。
性能问题。Perl 灵活的数据结构和处理性能通常不是很高(相对C/C++),若需要
高性能的处理有时需要使用其它语言重写。
Perl 语言的学习曲线浅而长。只要看看《Learning Perl》,就可以编写简单的Perl 程序了,然
而要深入掌握Perl,要使用Perl 的复杂数据结构,进行面向对象编程、多线程编程则不是那
么容易的事,需要很长的时间学习和实践。
第 5 页 共 63 页
2.
Perl 学习笔记
廖海仁
2010 年5 月
第 2 页 共 63 页
目 录
1. Perl 简介...........................................................................................................................4
2. 数据类型...........................................................................................................................5
2.1 概览.............................................................................................................................5
2.2 命名空间(Namespaces) ..............................................................................................5
2.3 标量(Scalars) ..............................................................................................................6
2.4 数组(Arrays) ...............................................................................................................9
2.5 关联数组(Hashes).....................................................................................................12
2.6 引用(References) ......................................................................................................13
2.6.1 Perl 引用简介................................................................................................13
2.6.2 创建引用.......................................................................................................13
2.6.3 使用引用.......................................................................................................14
2.6.4 符号引用.......................................................................................................15
2.6.5 垃圾回收与弱引用.......................................................................................16
2.7 数据结构.............................................................................................................16
2.7.1 Arrays of Arrays..........................................................................................17
2.7.2 Hash of Arrays.............................................................................................19
2.7.3 Arrays of Hashes.........................................................................................21
2.7.4 Hashes of Hashes ........................................................................................23
2.7.5 Hashes of Functions ....................................................................................25
3 操作符(Operators)..........................................................................................................25
3.1 概述..........................................................................................................................25
3.2 Perl 操作符一览.......................................................................................................26
3.3 各种操作符使用说明..............................................................................................27
3.3.1 项与左赋列表操作符...................................................................................27
3.3.2 箭头操作符...................................................................................................28
3.3.3 自增自减.......................................................................................................28
3.3.4 乘方...............................................................................................................28
3.3.5 表意一元操作符...........................................................................................28
3.3.6 捆绑操作符...................................................................................................29
3.3.7 乘操作符.......................................................................................................29
3.3.8 加操作符.......................................................................................................29
3.3.9 移位操作符...................................................................................................29
3.3.9 有名一元和文件测试操作符.......................................................................30
3.3.10 关系操作符.................................................................................................31
3.3.11 位操作符.....................................................................................................32
3.3.12 C 风格逻辑操作符......................................................................................32
3.3.13 范围操作符.................................................................................................32
3.3.14 条件操作符.................................................................................................32
3.3.14 赋值操作符.................................................................................................33
3.3.15 逗号操作符.................................................................................................33
3.3.16 逻辑and, or, not 和xor 操作符..................................................................33
3.4 与C 操作符的比较.................................................................................................34
3.4.1 Perl 操作符的特别之处................................................................................34
第 3 页 共 63 页
3.4.1 C 有Perl 没有的操作符................................................................................34
4. 语句.................................................................................................................................34
4.1 简单语句...................................................................................................................34
4.2 复合语句...................................................................................................................35
4.2.1 条件语句(if/unless 语句)..............................................................................35
4.2.2 循环语句(while/until/for/foreach 语句) ....................................................36
4.2.3 分支语句....................................................................................................38
5. 子程序(函数).............................................................................................................39
5.1 子程序简介...............................................................................................................39
5.2 函数原型与属性......................................................................................................41
5.3 Perl 内部函数...........................................................................................................42
6. 文件、目录与I/O .............................................................................................................43
6.1 文件操作..................................................................................................................43
6.2 目录操作.................................................................................................................44
6.3 print/printf.........................................................................................................45
6.4 注意事项.................................................................................................................45
7. 模式匹配.........................................................................................................................46
7.1 模式匹配操作符简介...............................................................................................46
7.2 模式修饰符...............................................................................................................48
7.3 模式匹配操作符详解...............................................................................................49
7.3.1 m//操作符(匹配)............................................................................................49
7.3.2 s///操作符(替换) ............................................................................................50
7.3.3 tr///操作符(字译) ...........................................................................................52
7.4 元字符.......................................................................................................................52
7.5 常见问题的正则解决方案.......................................................................................56
8. 面向对象编程.................................................................................................................56
8.1 模块使用...................................................................................................................56
8.2 对象使用...................................................................................................................57
9.Perl 特殊变量...................................................................................................................58
10 Perl 程序文档(POD)..................................................................................................60
11. Perl 编程风格...........................................................................................................61
12. 参考文献..................................................................................................................63
第 4 页 共 63 页
1. Perl 简介
Perl 一般被认为是Practical Extraction and Report Language(实用获取与报表语言)的缩写,是
由C 以及sed、awk、Unix shell 及其它语言演化而来的一种语言。它由语言学家Larry Wall
最初发明及实现。Perl 是一种为扫描任意的文本文件,从这些文本文件中获取信息,基于这
些信息打印报表而优化的语言。它也很适合于完成许多系统管理的任务。Perl 是一种粘合性
语言,旨在实用(易用、高效、完整)而不是漂亮(优美、小巧)。其吉祥物是骆驼,取其
虽并不漂亮却任劳任怨、能干活之特点。
Perl 不随意限制数据的大小,只要你有充足的内存。递归的深度也不受限制。关联数组使用
可以根据需要扩展以避免性能衰退。Perl 能利用复杂的模式匹配技巧来快速扫描大量数据。
尽管善于处理文本,Perl 也能处理二进制数据。
Perl 5 增加了模块化处理、面向对象编程、引进引用以处理多维数组等复杂的数据结构、
Unicode 支持、多线程支持等功能,使得Perl 成为一种更加完备强大的语言。
Perl 语言的座右铭是:There’s More Than One Way To Do It (TMTOWTDI,有多种方法可以
完成一件事,或者“条条道路通北京”)。Perl 是一种自然和智能语言,它能根据上下文环
境解释执行,同时有大量省略写法。
如果你通常想使用sed、awk 或sh 来解决的问题,但是却发现它们的能力不够,或者想运行
得更快一点,却不想傻傻地用C 来写,Perl 将是很好的选择。Perl 擅长于文本处理和系统管
理,不适合于实时嵌入式系统编程、操作系统底层开发(比如驱动程序开发)、复杂的多线
性共享内存应用以及极度大的应用。
Perl 语言的长处:
强大的正则表达式和模式匹配功能(接近理想的正则表达式语言)
复杂灵活的数据结构(Array of Array, Array of Hash,Hash of Array, Hash of Hash 等)
Unicode 支持(相对AWK 与C)
其不足是:
动态类型语言,不是很可靠
自然语言,是优点也是缺陷,使得Perl 语言代码可能晦涩难懂;
智能语言,是优点也产生不足:根据上下文解释编程者之意,可能产生臆断;也因
此产生种种编程陷阱。
不是很优美。多种方法做事,有时会让编程者无所适从。
性能问题。Perl 灵活的数据结构和处理性能通常不是很高(相对C/C++),若需要
高性能的处理有时需要使用其它语言重写。
Perl 语言的学习曲线浅而长。只要看看《Learning Perl》,就可以编写简单的Perl 程序了,然
而要深入掌握Perl,要使用Perl 的复杂数据结构,进行面向对象编程、多线程编程则不是那
么容易的事,需要很长的时间学习和实践。
第 5 页 共 63 页
2.