perl入门02:标量与数组

要点一:标量 “单数”

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遍历

你可能感兴趣的:(perl入门02:标量与数组)