Perl 语言入门(第四版)
blei@163.com 1 / 201 9/21/2006
Perl 语言入门
(第四版)
作者:Brian d foy, Tom Phoenix, Randal L.Schartz
译者: lebk 校对: 鄢 元 满
Perl 语言入门(第四版)
blei@163.com 2 / 201 9/21/2006
目 录
前 言:
..................................................................................................................................................................................................8
第一章 概 述 ...............................................................................................................................................................................................9
1
.
1
问题和解答
.....................................................................................................................................................................................9
1.1.1 本书适合你吗? ........................................................................................................................................................................................9
1.1.2 为什么如此多的脚注?.............................................................................................................................................................................9
1.1.3 练习题和解答呢? ..................................................................................................................................................................................10
1.1.4 习题前的数字是什么意思?...................................................................................................................................................................10
1.1.5 如果我是 Perl 教师,怎么办呢? ..........................................................................................................................................................10
1
.
2 Perl
代表什么?
........................................................................................................................................................................ 11
1.2.1 Larry 为什么发明 Perl? .......................................................................................................................................................................11
1.2.2 为什么 Larry 不采用别的语言?............................................................................................................................................................11
1.2.3 Perl 容易学习吗? .................................................................................................................................................................................... 12
1.2.4 Perl 为什么如此流行? ............................................................................................................................................................................13
1.2.5 Perl 正在发生怎样的事情?....................................................................................................................................................................13
1.2.6 Perl 擅长什么?........................................................................................................................................................................................13
1.2.7 Perl 不擅长什么? .................................................................................................................................................................................... 14
1
.
3
怎样获得
Perl
?
..........................................................................................................................................................................14
1.3.1 什么 CPAN?........................................................................................................................................................................................... 14
1.3.2 怎样获得支持? ......................................................................................................................................................................................15
1.3.3 有其它的支持吗? ..................................................................................................................................................................................15
1.3.4 当发现 Perl 中有错误时,该怎么办? ..................................................................................................................................................16
1
.
4
怎样才能写一个
Perl
程序?
......................................................................................................................................................16
1.4.1 一个简单的例子 ......................................................................................................................................................................................17
1.4.2 这个程序有些什么? ..............................................................................................................................................................................18
1.4.3 怎样编译 Perl?........................................................................................................................................................................................19
1
.
5
快速了解
Perl ..............................................................................................................................................................................19
1
.
6
第六节 练习
.................................................................................................................................................................................20
第二章 标量数据.......................................................................................................................................................................................21
2
.
1
数字
..............................................................................................................................................................................................21
2.1.1 所有数字内部的格式一致........................................................................................................................................................................21
2.1.2 浮点数 ...................................................................................................................................................................................................... 21
2.1.3 整数..........................................................................................................................................................................................................22
2.1.4 非十进制整数 ........................................................................................................................................................................................... 22
2.1.5 数字操作符...............................................................................................................................................................................................23
2
.
2
字符串
..........................................................................................................................................................................................23
2.2.1 单引号字符串 ........................................................................................................................................................................................... 24
2.2.2 双引号字符串 ........................................................................................................................................................................................... 24
2.3.3 字符串操作符 ........................................................................................................................................................................................... 25
2.2.4 数字和字符串之间的自动转换................................................................................................................................................................26
2
.
3 Perl
内嵌的警告
(warnings)..........................................................................................................................................................26
Perl 语言入门(第四版)
blei@163.com 3 / 201 9/21/2006
2
.
4
标量变量
......................................................................................................................................................................................27
2.4.1 选择好的变量名 .......................................................................................................................................................................................28
2.4.2 标量赋值...................................................................................................................................................................................................28
2.4.3 二元赋值操作符 ......................................................................................................................................................................................29
2
.
5 print
输出
......................................................................................................................................................................................29
2.5.1 字符串中标量变量的内插........................................................................................................................................................................30
2.5.2 操作符优先级和结合性............................................................................................................................................................................31
2.5.3 比较运算符...............................................................................................................................................................................................32
2
.
6 if
控制结构
....................................................................................................................................................................................33
2.6.Boolean 值....................................................................................................................................................................................................33
2
.
7
用户输入
......................................................................................................................................................................................34
2
.
8 chomp
操作
....................................................................................................................................................................................35
2
.
9 while
控制结构
..............................................................................................................................................................................35
2
.
10 undef
值
.......................................................................................................................................................................................36
2
.
1
.
1 defined
函数
............................................................................................................................................................................37
2
.
1
.
2
练习
........................................................................................................................................................................................37
第三章 列表和数组...................................................................................................................................................................................38
3
.
1
访问数组元素
..............................................................................................................................................................................39
3
.
2
特殊的数组索引
..........................................................................................................................................................................39
3
.
3
列表
...............................................................................................................................................................................................40
3.3.1 qw 简写 ....................................................................................................................................................................................................41
3
.
4
列表赋值
......................................................................................................................................................................................42
3.4.1 pop 和 push 操作.......................................................................................................................................................................................43
3.4.2 shift 和 unshift 操作..................................................................................................................................................................................44
3
.
5
将数组插入字符串
.......................................................................................................................................................................44
3
.
6 foreach
控制结构
..........................................................................................................................................................................45
3.6.1 Perl 最常用的默认变量:$_....................................................................................................................................................................46
3.6.2 reverse 操作............................................................................................................................................................................................... 46
3.6.3 sort 操作 ....................................................................................................................................................................................................47
3
.
7
标量和列表上下文
.......................................................................................................................................................................47
3.7.1 在标量 Context 中使用 List-Producing 表达式 .......................................................................................................................................48
3.7.2 在列表 Context 中使用 Scalar-Producing 表达式....................................................................................................................................50
3.7.3 强制转换为标量 Context .........................................................................................................................................................................50
3
.
8<STDIN>
在列表
Context
中
..........................................................................................................................................................50
3
.
9
练习
..............................................................................................................................................................................................51
第四章 子程序...........................................................................................................................................................................................53
4
.
1
定义一个子程序
..........................................................................................................................................................................53
4
.
2
调用子程序
..................................................................................................................................................................................54
4
.
3
返回值
..........................................................................................................................................................................................54
4
.
4
参数
(Arguments) ..........................................................................................................................................................................56
4
.
5
子程序中的私有变量
..................................................................................................................................................................57
4
.
6
参数列表的长度
...........................................................................................................................................................................57
4.6.1 更好的&max 程序 ...................................................................................................................................................................................58
4.6.2 空参数列表...............................................................................................................................................................................................59
Perl 语言入门(第四版)
blei@163.com 4 / 201 9/21/2006
4
.
7my
变量的注释
...............................................................................................................................................................................59
4
.
8
使用
strict Pragma ........................................................................................................................................................................60
4
.
9
返回操作
......................................................................................................................................................................................61
4.9.1 省略符号&...............................................................................................................................................................................................62
4
.
10
非标量返回值
............................................................................................................................................................................63
4
.
11
练习
.............................................................................................................................................................................................64
第五章 输入与输出...................................................................................................................................................................................65
5
.
1
从标准输入设备输入
................................................................................................................................................................... 65
5
.
2
从
<>
输入
......................................................................................................................................................................................66
5
.
3
调用参数
.......................................................................................................................................................................................68
5
.
4
输出到标准输出设备
................................................................................................................................................................... 69
5
.
5
使用
printf
格式化输出
................................................................................................................................................................. 71
5.5.1 数组和 printf ..................................................................................................................................................................................................72
5
.
6
句柄
...............................................................................................................................................................................................73
5
.
7
文件句柄的打开
...........................................................................................................................................................................74
5.7.1 Bad 文件句柄............................................................................................................................................................................................76
5.7.2 关闭文件句柄 ........................................................................................................................................................................................... 76
5
.
8
严重错误和
die ............................................................................................................................................................................77
5.8.1 警告信息和 warn .....................................................................................................................................................................................78
5
.
9
使用文件句柄
...............................................................................................................................................................................78
5.9.1 改变默认的输出句柄 ...............................................................................................................................................................................79
5
.
10
重新打开文件句柄
....................................................................................................................................................................79
5
.
11
练习
............................................................................................................................................................................................80
第六章 哈 希............................................................................................................................................................................................81
6
.
1
什么是哈希?
...............................................................................................................................................................................81
6.1.1 为什么使用 Hash? ...................................................................................................................................................................................82
6
.
2
哈希元素的存取
...........................................................................................................................................................................84
6.2.1 作为整体的 hash .......................................................................................................................................................................................85
6.2.2 Hash 赋值.................................................................................................................................................................................................86
6.2.3 大箭头符号(=>)..................................................................................................................................................................................87
6
.
3
哈希函数
.......................................................................................................................................................................................87
6.3.1 keys 和 values 函数...................................................................................................................................................................................87
6.3.2 each 函数...................................................................................................................................................................................................88
6
.
4
哈希的通常用法
...........................................................................................................................................................................89
6.4.1 exists 函数 .................................................................................................................................................................................................90
6.4.2 delete 函数.................................................................................................................................................................................................90
6.4.3 hash 元素的内插 .......................................................................................................................................................................................90
6
.
5
练习
...............................................................................................................................................................................................91
第七章 正则表达式...................................................................................................................................................................................92
7
.
1
什么是正则表达式?
................................................................................................................................................................... 92
7
.
2
使用简单的模式
...........................................................................................................................................................................93
7.2.1 元字符 ...................................................................................................................................................................................................... 93
7.2.2 简单的量词 ..............................................................................................................................................................................................94
7.2.3 模式中的分组 ........................................................................................................................................................................................... 94
Perl 语言入门(第四版)
blei@163.com 5 / 201 9/21/2006
7.2.4 选择符 ...................................................................................................................................................................................................... 94
7
.
3
字符类
...........................................................................................................................................................................................95
7.3.1 字符类的简写 ........................................................................................................................................................................................... 95
7.3.2 简写形式的补集 ......................................................................................................................................................................................96
7
.
4
练习
...............................................................................................................................................................................................96
第八章 正则表达式的应用 .......................................................................................................................................................................98
8
.
1
使用
m//
匹配
................................................................................................................................................................................98
8
.
2
可选的修饰符
...............................................................................................................................................................................98
8.2.1 不区分大小写:/i.....................................................................................................................................................................................98
8.2.2 匹配任何字符:/s.....................................................................................................................................................................................99
8.2.3 添加空格:/x............................................................................................................................................................................................99
8.2.4 将可选字符结合起来 ............................................................................................................................................................................100
8.2.5 其它选项.................................................................................................................................................................................................100
8
.
3
锚定
.............................................................................................................................................................................................100
8.3.1 词锚定 ....................................................................................................................................................................................................101
8
.
4
绑定操作符,
=~ ........................................................................................................................................................................101
8
.
5
模式内的内插
............................................................................................................................................................................102
8
.
6
匹配变量
....................................................................................................................................................................................103
8.6.1 内存值的保存 ........................................................................................................................................................................................104
8.6.2 自动匹配变量.........................................................................................................................................................................................105
8
.
7
一般的数量词
.............................................................................................................................................................................106
8
.
8
优先级
.........................................................................................................................................................................................106
8.8.1 优先级练习.............................................................................................................................................................................................107
8.8.2 更多.........................................................................................................................................................................................................107
8
.
9
模式测试程序
............................................................................................................................................................................107
8
.
10
练习
...........................................................................................................................................................................................108
第九章 使用正则表达式处理文件.........................................................................................................................................................109
9
.
1
使用
s///
进行替换
.......................................................................................................................................................................109
9.1.1 使用/g 进行全局替换 .............................................................................................................................................................................110
9.1.2 不同的分隔符 ......................................................................................................................................................................................... 110
9.1.3 可选的修饰符 ........................................................................................................................................................................................ 111
9.1.4 绑定操作 ................................................................................................................................................................................................ 111
9.1.5 大小写转换............................................................................................................................................................................................. 111
9
.
2split
操作
...................................................................................................................................................................................... 112
9
.
3join
函数
....................................................................................................................................................................................... 113
9
.
4
列表上下文中的
m// .................................................................................................................................................................. 114
9
.
5
更强大的正则表达式
................................................................................................................................................................. 114
9.5.1 非贪婪的数量词 .....................................................................................................................................................................................115
9.5.2 匹配多行文本 ........................................................................................................................................................................................ 116
9.5.3 更新大量文件 ......................................................................................................................................................................................... 117
9.5.4 在命令行中进行修改 ............................................................................................................................................................................ 119
9.5.5 非捕捉用的括号 ....................................................................................................................................................................................120
9
.
6
练习
.............................................................................................................................................................................................121
第十章 更多控制结构 .............................................................................................................................................................................122