目录
1.序言
perl语言是一门IC验证工程师常用的脚本语言。对于有经验的IC验证工程师是来说是必不可少的技能。在此我由浅入深得来分享一下我个人在学习这门语言时候的心得。
2.常用语法
2.1标量
标量就两种,数字和字符串。值得一提的是你可能会认为数字和字符串是两码事,但是在perl语言中这两者大多数情况下是可以内部转换的。
2.1.1数字
对于perl来说保存数据总是使用的双精度浮点数类型。这意味着你就算是在进行整数的运算,依然是被当成浮点数进行处理的。
写法示例
1.0 1.5e10 #7.5乘以10的10次方 1.5E10 #e可以大写 -1.5e24 #负1.5乘以10的24次方 1234_5678_1234 #可以加入下划线
2.1.2字符串
字符串除了字母以外还可以使用任何奇特的符号。这一点使得perl语言可以对几乎任何内容进行加工处理。例如:您可以将一个图形文件或者编译过的可执行文件读进perl的字符串变量,然后进行修改后再写回去。
perl完全支持unicode,即统一码。满足跨语言跨平台进行文本转换和处理。
perl支持空字符串。两个单引号中间什么都没有,表示空字符串。
''
一对单引号或是双引号都可以用来识别字符串的开始与结束。引号内部的内容为字符串直接量。
单引号和双引号的区别在于单引号是个“笨蛋”,给什么字符就是什么字符。双引号比较聪明,懂得有特殊含义的内容要进行转义。
示例如下:
'\n' #表示反斜杠和n两个字符
"\n" #表示换行符
双引号内字符串的反斜线转移列表见附录
2.2操作符
+ - * / #加减乘除
% #取余数
** #乘方运算
关于除法计算总是按照浮点数进行,例如:
10.2/0.3 #计算出来是34
10/3 #计算出来是3.333...
连接操作符"."把两个字符串连接起来,例如:
"hello"."fat" #得到"hellofat"
重复操作符"x"把左边的值重复多少遍,例如:
4x5 #得"44444"
双目赋值运算符号
+= #自加 $a += 5 等同于 $a = $a +5
.= #追加操作符 $a .= "b" 等同于 $a = $a . "b"
**= #乘幂操作
几乎所有的用于求值的双面操作符都可以加上等号成为双目赋值操作符。
比较操作符
在perl语言当中,不仅数字可以参与比较,字符串也可以参与比较,但是数字和字符串所使用的比较操作符不同。具体如下表所示:
比较 | 数字 | 字符串 |
相等 | == | eq |
不等 | != | ne |
小于 | < | lt |
大于 | > | gt |
小于或等于 | <= | le |
大于或等于 | >= | ge |
数字的比较与数学上的使用相同,字符串的比较规则示例如下:
'abc'eq'abc' #真
'abc'lt'abd' #真
'abc'lt'Abc' #假
' 'gt'' #假
2.3变量
以美元符号$开头的值为变量。它所持有的值会随着程序的运行不断变化。
$value
值得注意的是变量区分大小写,而且可以在变量中加入下划线。
2.4条件语句
注意elsif 的写法。
注意每句的分号在花括号内部。
if(判断条件)
{
执行内容1;
}
elsif(判断条件)
{
执行内容2;
}
else
{
执行内容3;
}
2.5循环语句
perl和大部分用来实现算法的语言一样,也有好几种循环结构。
需要注意的是在while循环当中,要条件持续为真,就会不断执行代码内容。
$count = 0;
while($count <10) {
$count + 1 ;
print "count is $count\n"; #依次打印 1 2 3 4...10
}
如果一开始判断条件就为假,则代码内容一次也不会被执行。
2.6数组
在perl当中列表和数组的叫法常常混用。但其实不是一个概念,数组是存储列表的变量。每个数组都包含一个列表,即便是空列表。
数组中的每个元素不一定是数字也可以是字符串。
数组中的元素访问示例:
$fred[0] = "hello0";
$fred[1] = "hello1";
$fred[2] = "hello2";
$fred[3] = "hello3";
数组元素是以连续整数来编号的,从0开始,之后每个元素依次加1。
列表的写法示例:
(0,1,2)
("hello0","hello1","hello2","hello3")
列表的赋值示例:
($a,$b,$c,$d)=(hello0,hello1,hello2,hello3);
在数组名之前加上@就可以引用整个数组。
@array
@array=("hello0","hello1","hello2");
@array=(@array0,@array1,$value0,$value1); #可以包含其他变量
@array=(); #空列表
pop:取出数组中组后一个元素并将其作为返回值返回。
$value = pop(@array);
push:添加一个元素到数组尾端。尾端是指最右端。
push(@array,1);
shift:取出数组头部(最左边)的元素并将其作为返回值返回。
$value = shift(@array);
unshift:添加一个元素到数组头部。
unshift(@array,1);
splice:删除数组中间的元素,最多支持4个。第一个参数表示要操作的目标数组,第二个参数表示要操作的一组元素的起始位置,第三个元素指定要操作的元素长度,第4个参数表示要新插入的元素列表。示例如下:
@array = (111,222,333,444);
@removed = splice(@array,1,2); #删除1号位和包括其在内的后面两个元素位置上的元素。
#操作后@array变为(111,444);@removed变为(222,333);
@removed = splice(@array,2); #删除2号位和其后面的所有元素。
#操作后@array变为(111,222);@removed变为(333,444);
@array2= (55,66);
@removed = splice(@array,1,0,@array2);
#在1号位的位置什么元素都不删。
#插入@array2在1号位。
#@removed为空。
#@array变为(111,55,66,222,333,444)
3.perl的内置信息
perl5.6以上版本的perl可以进行在编译时发出警告信息。
#! /usr/bin/perl
use warnings;
perl5.12以上的版本加入更严格的编译检查指令,让程序员发现自己代码中写的代码风格不佳的代码。
use strict; #强制使用一些严格的良好的代码风格
参考文献
[1] Randal L.schwartz,brian d foy&Tom phoenix. perl语言入门:第6版[M]. 南京:东南大学出版社. 2012.3
附录
双引号内字符串的反斜线转义
\n #换行
\r #回车
\t #制表符
\f #换页符
\b #退格
\a #系统响铃
\e #Esc
\007 #八进制表示的ASCII值 007表示系统响铃
\x7f #十六进制表示的ASCII值 7f表示删除键
\x{2744} #十六进制表示的Unicode U+2744表示雪花状的图形字符
\cC #控制符,control键+C
\\ #反斜线
\ #双引号
\l #将下个字母转为小写
\L #将它后面的所有字母都转为小写的,直到\E为止
\u #将下个字母转为大写
\U #将它后面的所有字母都转为大写的,直到\E为止
\E #结束作用范围