一.Perl介绍
Perl是Practical Extraction and Report Language的缩写,可翻译为"实用报表提取语言"
Perl是高级、通用、直译式、动态的程序语言。
Perl最初的设计者为拉里·沃尔(Larry Wall),于1987年12月18日发表。
Perl 借用了C、sed、awk、shell脚本以及很多其他编程语言的特性。
Perl 最重要的特性是Perl内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。
二.Perl语法
perl语法类似于C语言(perl源于Unix),语句由逗号划分,代码层次使用花括号{}划分,但是不必声明变量类型;
标量变量($name),数组(@name),哈希结构(%name),类型标识符,文件句柄没有标识符;
哈希结构可以使用列表创建,但不要以为它也是由圆括号括起来的; 在使用键时,用花括号。(特别注意)
数字之间比较用(==、>=、<=、!=),字符串之间比较则用(eq、gt、lt、ge、le)
print函数,不一定需要括号。几种情况:
print $name(直接输出) ; print ‘$name’(基本不用,错误的,原样输出);
print “$name”(有时会用,会自动替换); print 函数在做文件输入时(文件句柄),不能有逗号,只能用空格。
@_ 是函数传参时放置参数的数组,可以从中取实参;
$_ 是默认参数的意思,指的是在不指定的情况下,程序处理的上一个变量;
shift 是将数组的第一个元素 $array[0] 移走, 并将这个元素回传(return) (堆栈一节有详细讲解)。
shift函数是取数组的第一个元素,缺省就取@_的第一个函数,这句一般用在程序的开头,用于接收程序的参数,或者子函数的开头,用于接收子函数的参数。
句柄和文件的关系,文件必须被打开,并赋与句柄,才能操作;有的句柄可以直接使用,如STDIN、STDERR;广义上,标量变量就是一种代表数据的句柄。
perl中数值和字符串可以随意的使用递增和递减运算符。
三.Perl程序
第1学时 Perl入门
- 安装perl
- perl内部文档
- 第一个perl脚本
通用编程语言,胶水语言,perl擅长将其他程序连接到一起。
# 检查perl是否安装成功
perl -v
//第一个Perl程序
print "Hello,World!\n"
第2学时 Perl的基本构件:数字和字符串
标量常量: 数字和字符串
标量变量: 存放标量
(1)字符串
只有使用转义字符才能在字符串中插入特殊的字符
- 单引号:‘ ’中的每个字符都表示它本身,$a, \n等等,都不会进行处理,原样输出。
- 双引号:“ ”中Perl会查看是否存在 变量名 和 转义序列,一旦发现,会自动替换。
何便捷的将字符串用 双引号 或 单引号 括起来?
- qq运算符:qq(I said, “I love you!”) 用法如上
- q运算符: q(Tom’s tree) 用法与之前单引号一样,会原样输出单引号内的所有内容。
(2)标量变量
特殊变量($_):当前默认值,
(3)运算符(运算符之间可以有空格)
数字运算符有哪些?
加+;减-;乘*;除/;求余%;取幂**;
字符串运算符有哪些?
- 并置运算符(.)(运算对象必须为字符串标量或者标量变量);
- 可以使用反斜杠\,指定屏蔽字符串内的内插替换(标量变量和转义字符);
- 如果字符串中标量名和字符串过于紧密,可以用{}显示指定变量名,如${name}space;
- 重复运算符(x),如“-”x 10;
带名字运算符?
int(5.20); length(“nose”); lc(“ME TOO”); uc(“hal 9000”); cos(50); rand(5)(返回随机浮点数,默认是0-1)
尖括号运算符?
用于读写文件,<STDIN>,从标准输入读入一行;默认会读入我们最后输入的回车,可以使用从chomp运算符去掉;
chomp可以去除任何参数结尾的换行符,返回被删除的字符数(删除了返回1,没删除返回0)。
第3学时 控制程序流(foreach是核心)
- 语句块
- 运算符
- 循环
- 标号
- 退出perl
(1)if语句(几乎与c语言类似)
$r = 10;
if ($r == 10){
print '$r is 10!';
}
elsif ($r == 20){
print '$r is 20!';
}
else{
print '$r is neither 10 nor 20.'
}
#如果只有一个条件 可以把if 放到后面
print "Hello!\n" if(1==1);
(2)字符关系运算符
- eq等于;
- gt大于;
- lt小于;
- ge大于等于;
- le小于等于;
- ne不等于;
perl中有哪些假值? 0;“”;‘’;‘0’;“0”;undef;
逻辑运算符有哪些? and; or; not;
if ($x and $y and not $z){
print "All conditions met.\n";
}else{
print "Not all.\n"
}
(3)循环语句
$count=0;
while($count<=10){
print "$count\n";
$count++;
}
for($i; $i<=10; $i++){
print "i is now $i\n";
}
# 高级perl技巧:使用foreach进行遍历
@name=qw(wang chuang);
print " my name is ";
foreach $name(@name){ # $name是对@name中元素的引用, 可以修改@name
print "$name"
}
(4)流程控制工具
last语句(退出当前循环)(等同于C里的break)
$count = 1;
while($count <= 15){
last if ($count == 5);
print "$count\n";
$count++;
}
for($i=0; $i <= 100; $i++){
for($j=0; $j <= 100; $j++){
if ($i * $j == 140){
print "The product of $i and $j is 140.\n";
last;
}
}
}
next语句(回到当前循环头部)(等同于C里的continue)
for($i=0; $i<=100; $i++){
next if(not $i %2);
print "An odd number=$i\n";
}
第4学时 基本构建的堆栈: 列表与数组
1.如何从数组中获取元素?
@name=qw(wang chuang chuang);
print @name; #每个数组元素之间紧密排列,没有空格和换行
print "\n@name\n"; #元素之间有空格
print scalar(@name); #输出数组元素个数
print "\n"
@a = qw(wang chuang chuang);
print $a[0];
print $a[1];
print "\n";
$a[2] = "tuo";
print @a;
print "\n";
2.如何将 数组划分成 片
@a=qw(wang chuang tuo 1 2 3 4 5 6);
@b=@a[0,2,4,6];
print @b;
print "\n";
3.如何寻找 数组的结尾?
@a = qw(li zhi xin 1 2 3 4 5 6);
print $#a; # 返回结尾元素的索引
@a=qw(wang chuang tuo 1 2 3 4 5 6);
$size=@a;
print $size; #根据上下文, 返回数组元素的个数
print "\n"
print $a[-1]; # 返回数组的最后一个元素
如何测试数组中是否包含元素?
@mydata=qw(wang chuang tuo);
if(@mydata){
print "Not empty!\n";
}
对数组 进行操作
如何遍历?
# 普通方法:使用for循环 进行遍历
@name=qw(wang chuang tuo);
print "my name is ";
for($index=0;$index<@name; $index++){
print "$name[$index] ";
}
# 高级perl技巧:使用foreach进行遍历
@name = qw(wang chuang tuo);
print "my name is ";
foreach $name (@name){ # $name是对@name中元素的引用,可以修改@name
print "$name "
}