非常著名的perl学习手札(初学者有福了),本文档是精美的PDF版,排版精美,是网络上到现在为止能找到的最好的。 全书共分17个小节,通过讲解实例来学习perl,你可以复制这些代码,然后执行。学习非常方便! ### 非常著名的Perl学习手札(初学者有福了) #### 1. 关于Perl5 **1.1 Perl的历史** Perl是由Larry Wall在1987年开发的一种高级编程语言,最初的设计目的是为了简化文本处理任务,后来发展成为一种功能强大的脚本语言,被广泛应用于系统管理、Web开发、生物信息学等多个领域。 **1.2 Perl的概念** Perl是一种解释型的动态语言,支持面向过程和面向对象的编程范式。它具有强大的文本处理能力,能够轻松地处理各种复杂的文本数据。 **1.3 特色** - **灵活性**:Perl提供了丰富的内置函数和模块,使得开发者可以快速地实现各种功能。 - **可移植性**:Perl可以在多种操作系统上运行,包括Unix、Linux、Windows等。 - **简洁性**:Perl的语法简洁明了,易于学习和使用。 - **强大的文本处理能力**:Perl内置了正则表达式支持,非常适合用于文本分析和数据处理。 **1.4 使用Perl的环境** Perl通常在服务器端应用较多,如Web开发、系统管理等。它也广泛应用于科学计算和生物信息学领域。 **1.5 开始使用Perl** 要开始使用Perl,首先需要安装Perl环境。大多数Unix和Linux发行版都自带Perl。对于Windows用户,可以通过ActivePerl等工具进行安装。 **1.6 你的第一支Perl程序** 一个简单的“Hello World”程序: ```perl print "Hello, world!\n"; ``` 运行此程序,你将看到屏幕上输出“Hello, world!”。 #### 2. 纯量变数(Scalar) **2.1 关于纯量** 纯量是最基本的数据类型之一,在Perl中用来存储单一的值,如数字或字符串。 **2.1.1 数值** Perl可以自动识别数值类型的变量,并对其进行数学运算。 **2.1.2 字符串** 字符串是由字符组成的序列。在Perl中,可以使用单引号('')或双引号("")来定义字符串。双引号中的变量会被解析为它们的值。 **2.1.3 数字与字符串转换** Perl会根据上下文自动进行数字与字符串之间的转换。例如: ```perl my $x = 123; print "$x is a number\n"; # 输出 "123 is a number" ``` **2.2 使用你自己的变量** 在Perl中定义变量时,需要在变量名前加上美元符号($)。 **2.2.1 变数的命名** 变量名必须以字母或下划线开头,后面可以跟字母、数字或下划线。 **2.3 赋值** **2.3.1 直接设定** ```perl my $x = 5; # 直接赋值 ``` **2.3.2 还可以这样** ```perl my $y = $x + 1; # 表达式赋值 ``` **2.4 运算** Perl支持常见的算术运算,如加(+)、减(-)、乘(*)、除(/)等。 **2.5 变量的输出/输入** 使用`print`或`printf`函数可以输出变量的值。 **2.5.1 变数内插** 在双引号字符串中,变量名会被自动替换为其对应的值。 **2.6 Perl预设变数** Perl提供了一些预定义的特殊变量,如`$ARGV`、`$!`等,用于特定的用途。 **2.7 defined与undef** `defined`函数用于检查一个变量是否已被定义;`undef`则是未定义的值。 #### 3. 串行与数组 **3.1 何谓数组** 数组是一种可以存储多个值的数据结构。在Perl中,数组由一对方括号([])表示。 **3.2 Perl的数组结构** 数组中的每个元素都有一个索引,索引从0开始。 **3.3 push/pop** `push`函数用于向数组末尾添加元素;`pop`则从数组末尾移除元素并返回该元素的值。 **3.4 shift/unshift** `shift`用于从数组头部移除元素;`unshift`则在数组头部添加元素。 **3.5 切片** 可以使用切片操作来访问数组的一部分。 **3.6 数组还是纯量?** 根据上下文的不同,Perl会自动将数组转换为纯量。 **3.7 一些常用的数组运算** **3.7.1 sort** `sort`函数用于对数组中的元素进行排序。 **3.7.2 join** `join`函数用于将数组元素连接成一个字符串。 **3.7.3 map** `map`函数可以应用于数组上的每一个元素,执行指定的操作。 **3.7.4 grep** `grep`用于从数组中筛选符合条件的元素。 #### 4. 基本的控制结构 **4.1 概念** 控制结构是指控制程序流程的语句,如条件语句和循环语句。 **4.1.1 关于程序的流程** 程序的执行通常遵循从上到下的顺序,但可以通过控制结构改变这一流程。 **4.1.2 真,伪的判断** 在Perl中,空字符串和数字0被认为是假(false),其他值被认为是真(true)。 **4.1.3 区块** 区块是一段代码的逻辑单元,通常由一对花括号({})包围。 **4.1.4 变数的生命周期** 变量的作用域决定了其生命周期,局部变量仅在其定义的区块内有效。 **4.2 简单判断** **4.2.1 if** `if`语句用于执行基于某个条件的分支。 **4.2.2 unless** `unless`与`if`类似,但条件相反。 **4.2.3 一行的判断** 可以在一行内写简单的条件判断。 **4.3 else/elsif** `else`和`elsif`用于处理多个条件。 **4.3 重复执行** **4.3.1 while** `while`循环会在满足条件时重复执行一段代码。 **4.3.2 until** `until`循环与`while`类似,但在条件为假时才执行循环体。 **4.4 for** `for`循环可以用于遍历数组或其他序列。 **4.4.1 像C的写法** Perl支持类似C风格的`for`循环。 **4.4.2 其实用法** Perl中的`for`循环也可以用作foreach循环。 **4.4.3 有趣的递增/递减算符** Perl提供了`++`和`--`算符来递增或递减变量。 **4.4.4 对于数组内的元素** 可以使用`foreach`循环来遍历数组中的元素。 #### 5. 杂凑(Hash) **5.1 日常生活的杂凑** 杂凑类似于字典,其中每个条目都有一个键和一个值。 **5.2 杂凑的表达** 杂凑由一对大括号({})表示,键和值之间用`=>`分隔。 **5.3 杂凑赋值** 可以直接给杂凑变量赋值。 **5.4 each** `each`函数用于迭代杂凑的键值对。 **5.5 keys跟values** `keys`函数返回杂凑的所有键,`values`函数返回所有值。 **5.6 杂凑的操作** 可以使用各种函数来操作杂凑。 **5.6.1 exists** `exists`函数用于检查杂凑中是否存在某个键。 **5.6.2 delete** `delete`函数用于删除杂凑中的某个键值对。 **5.7 怎么让杂凑上手** 可以通过练习来熟悉杂凑的使用。 #### 6. 副例程 **6.1 关于Perl的副例程** 副例程(子程序)是封装了一段代码的独立单元,可以被多次调用。 **6.2 参数** 副例程可以接受参数,参数通过列表传递。 **6.3 返回值** 副例程可以返回一个或多个值。 **6.4 再谈参数** 副例程可以通过`@_`数组访问传入的参数。 **6.5 副例程中的变量使用** 在副例程内部定义的变量通常是局部变量。 #### 7. 正规表示式 **7.1 Perl的第二把利剑** 正则表达式是Perl中最强大的特性之一,用于模式匹配和文本处理。 **7.2 什么是正规表示式** 正则表达式是一种用于匹配字符串模式的语言。 **7.3 样式比对** 通过正则表达式可以匹配文本中的特定模式。 **7.4 Perl怎么比对** Perl使用`m//`或`//`模式匹配运算符来执行正则表达式匹配。 **7.5 怎么开始使用正规表示式** 了解基本的正则表达式语法是开始使用的前提。 #### 8. 更多关于正规表示式 **8.1 只取一瓢饮** 使用`m/模式/`来匹配文本中的模式。 **8.2 比对的字符集合** 可以通过`[]`来指定一个字符集合。 **8.3 正规表示式的特别字符** 正则表达式中有许多特殊字符,如`.`、`*`、`+`等。 **8.4 一些修饰字符** 修饰符可以改变正则表达式的匹配行为。 **8.5 取得比对的结果** 可以使用`$1`、`$2`等变量来获取匹配结果。 **8.6 定位点** 定位点用于匹配字符串的起始或结束位置。 **8.7 比对与替换** 使用`s///`运算符可以进行替换操作。 **8.8 有趣的字符串内交换** 可以通过正则表达式来实现字符串的替换。 **8.9 不贪多比对** 使用`?`可以进行非贪婪匹配。 **8.10 如果你有迭字** 使用`{n,m}`来匹配重复次数。 **8.11 比对样式群组** 可以使用括号`()`来创建群组。 **8.12 比对样式的控制** 使用修饰符来控制正则表达式的匹配方式。 #### 9. 再谈控制结构 **9.1 循环操作** 循环操作允许重复执行某段代码直到满足某个条件。 **9.1.1 last** `last`关键字可以提前退出循环。 **9.1.2 redo** `redo`关键字重新执行当前循环体。 **9.1.3 next** `next`跳过当前循环的剩余部分,进入下一次迭代。 **9.1.4 标签** 可以为循环添加标签来标识循环,方便使用`last`、`next`等控制流语句。 **9.2 switch** Perl没有内置的`switch`语句,但可以使用`given`和`when`来模拟。 **9.2.1 如果你有复杂的if叙述** 可以使用`given`和`when`来处理复杂的条件判断。 **9.2.2 利用模块来进行** 也可以使用第三方模块来实现类似`switch`的功能。 **9.3 三元运算符** Perl支持三元运算符`? :`。 **9.4 另一个小诀窍** 使用三元运算符可以让代码更简洁。 #### 10. Perl的档案存取 **10.1 档案代号(FileHandle)** `FileHandle`是一个文件句柄,用于打开和关闭文件。 **10.2 预设的档案代号** Perl默认定义了一些文件句柄,如`STDIN`、`STDOUT`和`STDERR`。 **10.3 档案的基本操作** 可以使用`open`和`close`函数来打开和关闭文件。 **10.3.1 开档/关档** 使用`open`函数来打开文件,`close`函数来关闭文件。 **10.3.2 意外处理** 在文件操作中,应该考虑异常处理。 **10.3.3 读出与写入** 使用`<FILEHANDLE>`和`print FILEHANDLE`来进行读写操作。 #### 11. 档案系统 **11.1 档案测试** 可以使用一系列函数来测试文件属性。 **11.2 重要的档案相关内建函式** Perl提供了一些内建函数,如`stat`、`chmod`等,用于文件操作。 **11.3 localtime** `localtime`函数用于获取当前时间的本地格式。 #### 12. 字符串处理 **12.1 简单的字符串形式** 可以使用各种函数来操作字符串。 **12.2 uc与lc** `uc`函数将字符串转换为大写,`lc`函数将字符串转换为小写。 **12.3 sprintf** `sprintf`函数用于格式化字符串。 **12.4 排序** 可以使用`sort`函数对字符串数组进行排序。 **12.5 多子键排序** 使用`sort`函数结合自定义比较函数可以实现复杂排序。 #### 13. 模块与套件 **13.1 关于程序的重用** 通过模块可以实现代码的重用。 **13.2 你该知道的CPAN** CPAN是一个巨大的Perl模块仓库。 **13.3 使用CPAN与CPANPLUS** 可以使用`cpan`命令来安装和管理模块。 **13.4 使用模块** 通过`use`语句来导入模块。 **13.5 开始写出你的套件** 可以使用`package`声明来创建自己的模块。 #### 14. 参照(Reference) **14.1 何谓参照** 参照是一个指向其他变量的特殊变量。 **14.2 取得参照** 可以使用`\`操作符来获取变量的参照。 **14.3 参照的内容** 可以通过`->`操作符来访问参照所指向的内容。 **14.4 利用参照进行二维数组** 可以使用参照来创建多维数组。 #### 15. 关于数据库的基本操作 **15.1 DBM** DBM是一个轻量级的键值存储系统。 **15.1.1 与DBM连系** 可以使用DBM模块来操作DBM文件。 **15.1.2 DBM档案的操作** 通过DBM模块可以进行增删改查操作。 **15.1.3 多重数据** DBM支持存储多值数据。 **15.2 DB_File** `DB_File`模块提供了更高级的DBM文件操作接口。 以上就是《非常著名的Perl学习手札》的部分内容概要,这份文档覆盖了Perl的基础知识以及一些进阶技巧,非常适合初学者入门。
剩余216页未读,继续阅读
- 硪爱你1412014-06-11非常好的东西啊 收藏了
- qq_269919652015-07-15作为perl入门参考,还是不错的
- forestmay2012-08-23217页,看来是很用心在写啊。多谢!
- 粉丝: 7
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助