Perl 是Practical Extraction and Report Language 的缩写,可翻译为 “实用报表提取语言”。Perl 是一门语法很灵活, 执行效率很高的语言, 有巨大的第三方代码库CPAN支持, 因此可以做到很多事情. 但是,笔者通常把Perl 当作一种高级的脚本语言, 用来开发一些常用的linux 工具, 编写一些日常服务器维护的脚本. Perl 特别删除对文本的处理.
1. Perl 简介
1.1 perl 的优点
linux 自带安装环境perl 的执行速度非常快perl 语法很精简, 有很多简便写法perl 集成了C, awdk, shell 等脚本以及其它语言的特效perl 语法很灵活.
1.2 perl 脚本规范
perl 脚本文件名建议以.pl 结尾perl 语句以分号; 结尾perl 脚本可以适当添加空格, 空行以缩进美化代码perl 代码块儿以{} 区分
2. Perl 的数据类型
2.1 直接量
直接量(literal) 是指某个具体数值或字符串在Perl 源代码中的写法, 是不可变的.直接量分为: 数字直接量,字符串直接量, 列表直接量Perl 数字直接量不区分整型和浮点型, 默认均以双精度(浮点型)存储Perl 字符串直接量需要注意单引号不支持字符转义, 双引号和反引号支持字符转义列表直接量常用于对标量的批量赋值或创建数组
2.2 变量
Perl 语言中主要的变量类型有标量, 数组, 哈希.
类型描述示例
标量用于表示一个数字或字符串的变量$name数组用于标识一组数组, 字符的有序集合的变量@array_name哈希用于标识一组key-value的无序集合的变量%hash_name
3. 控制结构
3.1 判断结构
perl 的判断结构有if 和 unless 这两种结构都是单匹配结构perl 语言没有类似switch case 这种多条件判断结构,需要借助于if-elsif 来实现unless 与if正好相反, if判断当表达式为真时执行,unless当表达式为假时执行.当if与unless执行逻辑为单行语句时的简写模式,不是省略花括号{},而是后置if语句.
3.2 循环结构
perl 的循环结构有, for, foreach, while, until 四种
while 与until 执行方法体的逻辑判断相反,类似于if与unless 的关系for与foreach 底层结构一样,是等价的 循环控制语句有last, next, redo三种方式
last: 类似于java 中的break, 直接结束最近的一层循环结构,执行循环结构后的语句next: 类似于java 中的continue, 跳过本次循环, 进行下一次循环redo: 重新执行本次循环
4. 自定义函数
4.1 perl 函数特点
函数定义使用关键字 sub + 函数名函数调用使用关键字 & + 函数名函数名不能以数字开头, 可由字母,数字,下划线组成函数体由大括号{} 限制函数可在脚本中任意位置定义, 在使用前, 不需要对函数做实现声明函数定义属于全局的
4.2 变量作用域
全局变量: 作用域为整个perl 脚本, 不加关键字my 和 自动创建的变量都属于全局变量局部变量: 定义变量时, 使用my 修饰的变量为全局变量, 作用域为最近的一个{} 之间
4.3 函数传参
函数参数为一个无限制长度的列表直接量调用函数时, 所传入的所有参数都会存入@_数组中, 无论你传的是标量, 数组, 还是哈希, 都会自动转换并存储在@_这个数组中函数内可以通过$_[idx]来获取具体参数
4.4 函数返回值
函数都有一个返回值, 为一个无限制的列表直接量, 可使用return 返回函数返回值可根据上下文自动化转化为标量, 数组, 哈希
5. 正则表达式
正则表达式(regular expression) 在Perl 里面通常也叫模式(Pattern).正则表达式是用来匹配或不匹配某个字符串是否符合特定字符串模板的,也可以实现字符串的替换.Perl 语言的正则表达式是非常强大和非常灵活的
6. 标准输入输出
默认情况下, Perl 程序标准输入为键盘输入, 标准输出为终端显示器.在Perl 脚本中是通过文件句柄与标准输入输出进行交互的.
标准输入句柄: STDIN标准正确输出句柄:STDOUT标准错误输出句柄: STDERROR 标准输入读取一行文本: 标准输出有: print, printf , say
print: 输出一行文本, 不支持格式化字符串, 支持转义字符, 不自动添加换行符printf: 输出一行文本, 支持格式化字符串, 支持转义字符, 不自动添加换行符say: 输出一行文本, 不支持格式化字符串, 支持转义字符, 自动添加换行符 标准输出重定向: 只要修改标准输出文件句柄STDOUT指向即可
7. 文件操作
7.1 文件读写
perl 程序通过文件句柄对文件进行文件读写文件句柄相当于一个指针, 指向这个文件;perl 内置句柄有: STDIN, STDOUT, STDERROR 等定义文件句柄有两种方式: 一种是会名称全部时大写, 另一种时是定位为标量, 笔者建议句柄使用标量, 因为perl默认的文件句柄为全部大写.
7.2 文件类型判断
perl 语言提供了很多对于判断文件属性的操作符,可以进行组合使用。
判断文件权限: -r, -w, -x, -o判断文件类型: -f, -d, -L判断文件存在: -e, -z, -s
7.3 文件目录
虽然perl 语言提供了对文件目录操作的一组API, 但是笔者认为直接通过调用系统命令方式操作目录更为简单, 这样可以少学习一组API
8. 自定义模块儿
为了提升代码的重用性,perl 语言有一个模块儿的概念,类似于java中的jar包。 这样的话,我们就可以构建自己的函数库, 从而实现代码的重用.