要点一:标量 “单数”
1、直接量
标量直接量即直接定义的值,一般为以下两种:
1.1、字符串
- 即字符组合,通常字母,也可包括数字、标点等;
- 可以为空;
- 需要使用引号,一般双引号即可
一般单纯字符串,使用单引号与双引号无差别。但是若字符串里含有转义符、变量时,双引号支持转义;而单引号就不管的。
- 字符串运算主要有
.
点号表示两字符串的连接;x
表示字符串重复次数。
1.2、数字
使用时直接使用或加运算符即可。常见的有加减乘除+-*/
,乘幂为**
,取余数%
.
2、标量变量
- 储存标量值,动态变化;
- 用
$b变量名
表示;
注意变量名不能以数字开头,尽量使用小写字母。 - 变量赋值如下
#赋字符串
$dna="ATTCGATGC";
$dna.="ATTC"; #即等同$dna="ATTCGATGC"."ATTC"的简便写法
#赋数字
$gene_num=3;
$gene_num+4=3; #即等同$gene_num=$gene_num+4的简便写法
3、标量比较
数值与字符串比较操作符
- 文本字符串比较符常用的是相等
eq
与不等ne
- 标量比较常用于
if
判断语句,如下例
if (4>3) { #第一行括号内设置比较,判断真假以执行下面的语句
print "It is right\n";
} else {
print "It is wrong\n";
}
注意while判断真假方式:若为数值型,值为0,则为假,其余为真;若为字符串,空字符串为假,其余为真。
4、其它
4.1、undef特殊标量:表示0或者空字符串
$tmp=undef
4.2、chomp函数:去掉标量结尾的换行符,十分常用;因为在实际操作中,逐行读取一个文件内容,每行结尾都会有一个换行符的。
说到换行符,不同系统一般会有所差异。Linux为
\n
,Mac为\r
,Windows为\r\n
。unix下有相关命令可支持不同版本的换行符格式转换,如下图。
换行符转换
要点二:数组 “复数”
这里有两个概念:列表与数组,但一般指的都是一个意思,可不必区分
- 列表list是指标量的有序集合;
- 数组array则是存储列表的变量,形式为
@数组名
1、构建数组
- 法1:使用括号,变量间逗号相隔
@array=(1,2,3,4,5);
- 法2:
qw
配合括号,可省去逗号;字符串也可以省略引号。也可以使用非括号的界定符 // {} !! 等均可(实现得到方法不止一种)
@strings=qw (fred barney betty wilma dino);
- 法3:范围操作符
..
,适用于数字标量
@array=(1..5);
- 法4:
split
函数分隔字符串为数组
$scalar="ad:cdf:ee:po";
@array=split /:/,$scalar;
# join函数正好与之相反
$new_scalar=join ":",@array ;
制表符
\t
表示,等于4个空白。制表符分割的结果可以在excel中分列打开,因此常用。
2、访问数组
- 由于数组的有序性,因此利用下标索引进行访问;
- 注意perl数组下标索引默认从0开始的。
例如@array=(1..5)
中$array[0]
表示第一个标量1;$array[1]
表示第二个标量2. -
$#array
表示数组最后一个索引值,上述例子即等于4;数组元素个数即为$#array+1
3、数组操作
3.1 头与尾的取舍
push
:结尾添加 ; pop
:结尾移除
shift
:开头移除 ; unshift
:开头添加
- 四种函数中生物信息数据常用到
shift
,以去除序列文件分割后的一个ID信息。
四个函数
(图取自生信星球的一篇perl推文)
@number=(1,2,3,4,5);
$value=pop @number;
print $value\t;
print @number; #会少一个
push @number,5;
print @number; #又补上了
3.2 排序 sort
函数
#!/usr/bin/perl -w
@number=(1..10);
@number_sort=sort (@number);
print "@number\n";
print "@number_sort\n";
结果会发现 sort默认并非按照数值大小排序,10排在了第二位。这是因为perl排序默认并非为数值排序。后面会学习到实现数值排序的方法。
1.pl
3.3 反转 reverse
函数
- 同时支持对数组,以及字符串的反序。
- 因此在序列信息互补配对中常用到reverse。
#!/usr/bin/perl -w
@number=(1..10);
@number_re=reverse (@number);
print "@number\n";
print "@number_re\n";
image.png
3.4 遍历数组标量 foreach
函数
#!/usr/bin/perl -w
@number=(1..10);
foreach $num (@number){ #利用中间变量遍历数组
print "$num\n"
}
# $_为一特殊变量,为指明遍历中间变量时,则默认为它
foreach (@number){ #这种写法更为简洁
print "$_\n"
}
foreach遍历