(转)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基础教程一的主要内容,如果未能解决你的问题,请参考以下文章

Perl基础教程--精华篇

YAML基础教程

Apache基础教程

PHP入门基础教程

快速上手Linux玩转典型应用视频教程 Linux基础教程 php/java/python环境配置

Python基础教程之List对象 转