perl 是一种强大的脚本语言,主要用于脚本处理、报表生成,代码简洁高效,perl可以用少量代码实现其他语言很多行代码才能完成的任务,但是这样的代价就是 perl 难学易忘,而且阅读起来比较费力。
这里简单记录一些 perl 基本语法:
1. 创建 Perl 变量
perl 变量分为三种:标量,列表,哈希
一般字符和数字都是标量,创建标量用美元符号 $ 开头:
$var = "str01"; # 字符变量
$var = 123; # 数值变量,注意 perl 每条命令都以分号 ‘;’ 结尾
注意在比较标量大小时,数值变量用 ==,>=,<=; 而字符变量用 eq,gt,lt
创建列表(即数组)用符号 @ 开头,列表元素用小括号括起来:
@ary = (aa, bb, cc);
访问列表元素用中括号:
print $ary[1]; # 输出结果为 bb ,因为角标是从0开始算
创建哈希用符号%开头,哈希元素用小括号括起来,哈希“键--值”对应可使用“key => value”
%hash = ( k1 => Jack,k2 => Pony );
访问哈希元素用花括号:
say $hash{k2}; # 输出结果为 Pony
2. Perl 控制流
perl 控制流语法与C语言类似:
如下图示例: if, for, while, foreach (foreach 主要用于处理数组)
注意以下几点:
a) 注意用 foreach 处理数组时,需要小括号将数组名括起来,如上图中的 (@ary),这个小括号不可省略!
b) 上图中用的是 say 命令来打印字符,say 与 print 的区别是 say 会自动给行尾加上回车,而 print 不会。
c) 再判断真假的条件语句中,根据判断条件的不同类型有几种情况:
如果是数值变量:0为假,其他为真;
如果是字符变量:空字符串为假,其他为真;
如果是数组:空数组为假,其他为真;
d) foreach 和 while 等循环语句可以省略元素变量,这时在语句体中用符号 $_ 访问当前元素,示例如下:
3. Perl 子程序(函数)
注意以下几点:
a) 特殊符号 @_ 是一个数组,函数参数就是保存在这个特殊数组中
b) 函数中定义的变量默认是全局变量,最好加上关键字 ’my' 改为局部变量
c) 调用函数时最好在函数名字前加上 ‘&’
d) 允许把调用语句写在创建子程序前面
所以上面这段程序按照规范的写法应该是这样:
4. 神奇的钻石操作符
假设脚本 run.pl 中的内容如下:
文件 file.txt 的内容如下:
然后执行命令 run.pl ./file.txt,此时脚本中的钻石操作符表示 “每次从文件 file.txt 中读取一行,然后执行打印,接着读取下一行,再打印,直到读完最后一行,退出循环 ”
而如果脚本 run.pl 中的内容是这样:
同样执行命令 run.pl ./file.txt,此时钻石操作符表示 “ 将文件 file.txt 中的所有行都读进来,保存成一个列表,列表的每个元素就是文件中的每一行内容,让后用 foreach 遍历这个列表 ”
所以同样是钻石操作符,在不同的上下文中就表示不同的含义:
在 while 语句中,while 的条件只能是标量,所以是标量上下文,所以这时每次从文件中取出一行,作为字符串标量来执行一次循环;
而在 foreach 语句中,是列表上下文,所以这时直接从文件中取出所有的行,组成一个列表。
根据上面的规则,来看下面的脚本,如果 run.pl 中的内容如下:
命令reverse 只能接受列表参数,所以是列表上下文,执行命令 run.pl ./file.txt,结果是分三行依次输出 three two one
5. Perl 中的特殊字符
a) 字符 @_ : 这是一个列表变量,存储了函数的所有输入参数
b) 字符 $_ : 一般用在循环体中,表示循环变量的当前值
|----------------------------------|