(转)Perl基础教程一
Posted 砍柴问樵夫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(转)Perl基础教程一相关的知识,希望对你有一定的参考价值。
声明:这篇文章转载自生信人,我做了一点修改
一、Perl的环境准备
Linux/Unix:大多数内置 一些软件也内置perl,
Windows:ActivePerl5.10.0 Perl的工具
二、编辑工具
notepad++、ultraedit、sublime text
三、变量
不像C语言一样,perl无需指定数据类型。
1、 perl的三种变量
scalar:标量,以$开始,后面以字母或_开 头,再后面可以是字母或数字
array:数组,列表,以@开头
Hash: 哈希,散列,以%开头
2、变量特征
大小写敏感:$Var、$VAR、$var
内置变量:$/、$@、@ARGV、$_ 等
3、字符串变量
由双引号或单引号标识的一组字符;最少0个字符(“”为空串),最多可以占满内存。
记住一些常用的转义字符 \ 。加上\则$var就不再是系统内置变量
例如:
my $var = 20;
print“the \$var is $var.”
结果:the $var is 20.
注意单引号的用法:不替换、不转义,也就是“所见即所得”!
$var="str”;
print “this is $var";#this is str 赋值的变量的内容
print ‘this is $var'; #this is $var 系统内置变量
4、变量初值
未创建时状态为undef
5、函数
length():字符串长度
uc、lc、ucfirst、lcfirst:大小写转换函数
substr、index、pos:字符串操作函数
sin等三角函数
rand()、srand():随机发生函数(即生成随机种子)
chop函数: $lastchar =chop($str) #截去最后一个字符
chomp函数:$result=chomp($str)#截去末尾的行分隔符(通常为”\n”),行分隔符由$/定义
die函数:在控制台标准错误输出信息后退出程序
warn: 输出信息后不退出程序,只起警报作用
$!、$@:内部变量,包含错误代码
6、控制结构
if(condition1){ } elsif(condition2){ }else{ }
unless(){}
until(){}
do{} until()
while(){}
do{} while()
for(;;){}
foreach(){}
示例:
foreach $a(@a){statement;}#用于循环数组,每一行存储到$a中
foreach $a(1,2,3,4){}用于列表
foreach $k(keys %h){}用于哈希/散列
foreach $a(@a[1,2,4]){}仅对数组部分元素
foreach (@a){}缺省循环变量为$_
7、 循环控制
last:退出当前循环
next:停止当前循环,进入下一循环
redo:重新执行本次循环
goto:跳转
8、列表-数组的形式
形式:(1,“a”,2.3,$a,$x+1),其元素可以是数 字、字符串、变量、表达式
空列表(),单元素列表(2)
qw(1 $a str) :列表简写,()可以用其他符号表示,但一般成对存在,如<> { }等,内部元素可以是数值、变量、不带引号的字符串, 中间用空格分开。
9、数组-列表的存储
@a=(1,2,3),不同于$a,初始值为();
元素形式:$a[0]表示第一个元素,索引从0开始, $a[‐1]表示倒数第一个元素
数组的赋值: @a=(1,2,3,4); @b=@a; @b=(2,3);@a=(1,@a,4);
@a=<>;#从键盘输入进行赋值,即标准输入,也可以是@a=<STDIN>。输入完毕后,按下CTRL‐d结束。
改变元素的值:$a[1]=3;
超出数组大小的元素赋值:$a[5]=6; #自动增长,其他元 素为NULL
例如:
@a=(1,2,3);
$a[5] = 6;
结果@a= (1,2,3,null,null,6)
10、 数组的读出
@a=(1,2,3);
$a=$a[1];
($x,$y,$z)=@a; ==> $x=1,$y=2,$z=3;
($x,$y)=@a; ==> $x=1,$y=2;
($a,$b,$c,$d)=@a; ==> $a=1,$b=2,$c=3,$d=“”;
$a=@a=$#a+1; #$a为数组长度,$#a为数组的最后一个元 素的索引
($a)=@a; #数组的第一个元素$a[0]
打印数组:print @a;#元素直接相连,没有空格分割
print“@a”;#元素之间用空格分开
11、数组切片
@a=(1..5)
@sub=@a[0,1,3];
@a[1,3]=(“a”,”b”);
@b=(1,2,3);
@sub=@a[@b];
@a[1,2]=@a[2,1];
@a[1,2,3]=@a[3,2,4];
12、数组操作函数
sort: $a,$b(系统内置变量)表示数组元素;
@b=sort{$a<=>$b}@a 对一维数组排序;
@b=sort{$a->[0]<=>$b->[0] }@a 对二维数组排序;
@b=sort{$a->[0]<=>$b->[0] or $a->[3]<=>$b->[3] }@a##先按照第一列再按照第4列排序;
以上均为对数字按照从小到大排序,若按照从大到小则$a与$b位置反过来;
对字符串排序使用cmp;
reverse @a; #数组的逆序
chop @a; #每个元素截去最后一个字符
shift(@a); #删除数组第一个元素并返回该值,缺省对@ARGV数组
unshift(@a); #在数组头部添加元素,返回新数组长度
push(@a,$a); #在数组末尾添加元素
pop(@a);#删除数组末尾元素
join(连接符号,@a)把数组连接为一个串 @a=('a’,‘b’);
join(‘:’,@a) ==>“a:b”;
split(/分隔符/,分割串,长度) 分隔符缺省为空格,可省略; 分割串缺省为$_,可省略; 长度:可省略;缺省为全部分割。
例如:
$s=“a,b,c”;
@a=split(/,/,$s);#即@a=(‘a’,’b’,’c’);
@a=split(/,/,$s,2);#即 @a=(‘a’,’b’,’c’);
splice函数:@ret=splice(@a,skip,length,@newlist);
对数组@a进行操作,跳过skip个元素,然后用@newlist替换 length个元素
@newlist长度可以不为length,但其替换长度总为length 如果length=0表示为插入;
如果@newlist=()则表示为删除
当length和@newlist都省略时表示全部删除 。
grep(/pattern/,@search)对数组@search的每个元素进行搜索匹配pattern
map(expr,@list)对数组@list的每个元素进行expr运算, 返回运算后的数组。
13、二维数组
@aoa=[[1,2,3],[‘a’,’b’,’c’]]; 该数组的元素为两个数组
子数组访问:$aoa[0][0]=1 、$aoa[1][2]="c";
14、关联数组:哈希/散列
关联数组的表示:%hash=(1,’a’,2,’b’);
关联数组的下标为关键字key,由key得到的值为value
上式的意义是%hash=(1=>‘a’,2=>’b’);
元素形式$hash{1}=‘a’
15、关联数组的赋值
%a=(“key1”,1,”key2”,2);
$a{"liu"}="wang";
$a{"you"}="we";
16、关联数组操作函数
keys(%hash),values(%hash)分别返回键和值的列表,返回元素无顺序
($key,$value)=each(%hash)#返回哈希的键值
exists $hash{‘key’}判断关键字是否存在 undef(%h)相当于删除散列 %h=();
delete :删除键$a{"you"}
17、关联数组的顺序
foreach $w(sort keys(%hash))#按照字符串排序
foreach $w(sort {$a<=>$b}keys(%hash))#数值从小到大排序
以上是关于(转)Perl基础教程一的主要内容,如果未能解决你的问题,请参考以下文章