Perl——标量&列表数组

Posted 懒癌终结君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl——标量&列表数组相关的知识,希望对你有一定的参考价值。














1、简介

1、什么是Perl

Perl——标量&列表数组

  • Perl哲学:
    There's More Than One Way TO DO It.

  • 常用Perl来做什么
    处理文本
    简单计算
    调用模块,结合其他语言作图

2、Perl的优缺点

Perl——标量&列表数组

Perl没有严格的格式限制

Perl——标量&列表数组

备注:
很多平台默认安装Perl,输入命令 perl -v查看

sqc@DESKTOP-IUM4B9V:~$ perl -v

This is perl 5, version 30, subversion 0 (v5.30.0) built for x86_64-linux-gnu-thread-multi
(with 46 registered patches, see perl -V for more detail)

Copyright 1987-2019, Larry Wall

Perl may be copied only under the terms of either the Artistic License or theGNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

2、标量变量

1、标量

Perl——标量&列表数组

Perl——标量&列表数组

注意:Perl 区分大小写 !!!
· 脚本式编程
直接将代码写在一个新建的文件中(这里我新建的叫scalar.pl)
sqc@DESKTOP-IUM4B9V:~$ vim scalar.pl
进入文件输入:
#!/usr/bin/perl -w   
use strict;

my $name = "sqc";

print "$name ";    #双引号——正常解析一些转义字符与变量
print '$name ';    #单引号——无法解析会原样输出

#!/usr/bin/perl -w
(/usr/bin/perl) 定义了 Perl 可执行文件在计算机上驻留的位置,指示计算机使用该 Perl 可执行文件的副本执行 scalar.pl文件。此命令行的第二部分 (-w) 是 Perl 中的一个重要工具:它支持在执行脚本时发出警告,通知最终用户可能发现的任何错误。
use strict;
use strict 语句添加到 Perl 脚本,有助于发现任何可能的输入或逻辑错误

保存退出,显示:
sqc@DESKTOP-IUM4B9V:~$ perl scalar.pl
sqc
$name sqc@DESKTOP-IUM4B9V:~$   #单引号原样输出$name

是换行:

sqc@DESKTOP-IUM4B9V:~$ perl scalar.pl
sqcsqc@DESKTOP-IUM4B9V:~$     #不加,输出的sqc和属主信息在一起

sqc@DESKTOP-IUM4B9V:~$ perl scalar.pl    #加,换行!!!
sqc
sqc@DESKTOP-IUM4B9V:~$
·交互式编程

直接在命令行输入:

sqc@DESKTOP-IUM4B9V:~$ perl -e 'print "Hello World
"'
Hello World

2、判断是否被定义

Perl——标量&列表数组

练习:
1、判断标量是否被定义
  • 未被定义

#!/usr/bin/perl -w
use strict;

my $name = "sqc";

print "$name ";

my $a;  #a未被定义

my $re = defined($a);
print "$re ";

输出:

sqc@DESKTOP-IUM4B9V:~$ perl scalar.pl
sqc
                        #这一行什么都没有
sqc@DESKTOP-IUM4B9V:~$


  • 被定义
    脚本文件输入:

sqc@DESKTOP-IUM4B9V:~$ perl scalar.pl
sqc
1                  #被定义,则显示1
sqc@DESKTOP-IUM4B9V:~$

输出:

#!/usr/bin/perl -w
use strict;

my $name = "sqc";

print "$name ";

my $a = "Hello";   #被定义

my $re = defined($a);
print "$re ";
2、截取字符串标量字串

substr(截取的字符串名称, 截取起始位置编号, 截取长度)  (从0开始编号

#!/usr/bin/perl -w
use strict;

my $ac = "ANCJDNLNDNCN;LNCDSNCAJCNJN";
print "$ac ";
my $sub = substr($ac, 04);   #截取前四个
print "$sub ";

输出:

sqc@DESKTOP-IUM4B9V:~$ perl scalar.pl
ANCJDNLNDNCN;LNCDSNCAJCNJN
ANCJ   
sqc@DESKTOP-IUM4B9V:~$
3、去掉标量最后一个换行符和最后一个字符
#!/usr/bin/perl -w
use strict;

my $b = "happy ";
print "$b";     #上面有一个换行符,所以不用再打一个

chomp($b);    #去掉了换行
print "$b";

print " *** ";    #输入制表符
chop($b);        #去掉b中的最后一个字符,即happ
print "$b";
sqc@DESKTOP-IUM4B9V:~$ perl scalar.pl
happy
happy   ***     happsqc@DESKTOP-IUM4B9V:~$ 

去掉了换行所以就在一排,输出的是happ

Perl——标量&列表数组

Perl——标量&列表数组

Perl——标量&列表数组

这里 x就是小写的字母x,看起来像乘号。

Perl——标量&列表数组

Perl——标量&列表数组

区别:
#!/usr/bin/perl -w
use strict;

my $a=5;
my $b=$a++;   #b=a(即:现在给b赋值为5),然后a自增(即:a变成6)
my $c=--$a;   #c=a-1(即:给c赋值时,a要先自减,现在a=5, 上一步变成6了,所以c=5)
my $d=$a--;   #d=a(a在上一步时变成了5,现在a的值为4,因为在给d赋值之后要自减)

print"$a $b $c $d ";

my $h=5;
my $e=++$h;
my $f=$h--;
my $g=--$h;

print"$h $e $f $g ";
sqc@DESKTOP-IUM4B9V:~$ perl scalar.pl
4       5       5       5
4       6       6       4
Perl——标量&列表数组

3、操作符优先级

Perl——标量&列表数组

3、列表与数组

Perl——标量&列表数组
Perl——标量&列表数组

1、赋值

Perl——标量&列表数组
Perl——标量&列表数组
Perl——标量&列表数组

数组的长度=最后一个索引值+1
索引值:编的序号

Perl——标量&列表数组

Perl——标量&列表数组

查看某数组某编号的元素赋值: $数组名[$编号]

Perl——标量&列表数组

pop 将数组最后一个元素取出来
push 在数组最后一个位置再添加一个元素

#!/usr/bin/perl -w
use strict;

my @seq = qw(ATCGATGC AGTCGT CGTAGCGGT CAGT ACGTCGTG);   #创建一个数组seq
my $len = scalar(@seq);   #查看数组的长度
print "Array len:$len ";   
my $index = $#seq;   #查看数组的最后一个索引
print "Last index: $index ";   

my $last = pop(@seq);   #数组最后一个元素取出来(它现在就少了第一个元素)
print "Last element:$last ";
$len = scalar(@seq);   #查看现在数组的长度,会少一个,即为4
print "Length: $len ";

push(@seq, "ACTGTGTACGTG");   #在最后加上一个元素ACTGTGTACGTG
print "Last element: $seq[-1] ";   #-1是倒数第一个元素(负数代表倒数)
$len = scalar(@seq);   #查看现在数组的长度,会多一个,即为5
print "Length: $

输出:

sqc@DESKTOP-IUM4B9V:~$ perl array.pl
Array len:5
Last index: 4
Last element:ACGTCGTG
Length: 4
Last element: ACTGTGTACGTG
Length: 5
Perl——标量&列表数组

shift 将数组最前面一个元素取出来
unshift 在数组最前面添加一个元素(原本的编号都要加一)

Perl——标量&列表数组

Perl——标量&列表数组

sort 默认按照ASCII值排序,即:
第一位数的大小排序,然后再以第二位数大小排序。 例如: 10,11,8,9…
sort{$a <=> $b} 其中 $a 指较小的元素, $b 指较大的元素 ($a在数值比较符的前面,则为由小到大排序)

Perl——标量&列表数组
例题:将以下字符串按空格切割成数组,并打印cds的起始和终止位置

$gff = "chr3 protein_coding CDS 434 486 . + 0 Parent=ENSP00000373354;"

#!/usr/bin/perl -w
use strict;

my $gff = "chr3 protein_coding CDS 434 486 . + 0 Parent=ENSP00000373354;";

print "$gff ";    #单纯的看看它输出来长什么样子

my @cdsinfo = split(" ", $gff);   #按照空格分割
my $len = scalar (@cdsinfo); #看看它有几个元素
print "Length: $len ";
print "@cdsinfo "; #看看它和输出的$gff有什么区别,事实上输出来是一样的

print "Start: $cdsinfo[3] "; #输出第三位元素
print "End: $cdsinfo[4] "; #输出第四位元素

my @a = join(':', @cdsinfo); #用:将数组元素隔开
print "@a ";

输出:

sqc@DESKTOP-IUM4B9V:~$ perl array.pl
chr3 protein_coding CDS 434 486 . + 0 Parent=ENSP00000373354;
Length: 9
chr3 protein_coding CDS 434 486 . + 0 Parent=ENSP00000373354;
Start: 434
End: 486
chr3:protein_coding:CDS:434:486:.:+:0:Parent=ENSP00000373354;


length() 元素长度的统计
scalar() 数组中元素个数统计

#!/usr/bin/perl -w
use strict;

my @seq = qw(ATCGATGC AGTCGT CGTAGCGGT CAGT ACGTCGTG);

my @arrayLen = map(length($_),@seq);   #显示每个元素的长度
foreach my $echo(@arrayLen){
        print "element length: $echo ";
}

my @arraySort = sort @arrayLen;   #显示每个元素长度,且按从小到大排序
foreach my $echo(@arraySort){
        print "element length: $echo ";
}
sqc@DESKTOP-IUM4B9V:~$ perl array.pl
element length8   #显示每个元素的长度——结果
element length6
element length9
element length4
element length8
element length4   #显示每个元素长度,且按从小到大排序——结果
element length6
element length8
element length8
element length9


以上是关于Perl——标量&列表数组的主要内容,如果未能解决你的问题,请参考以下文章

perl 第六弹 变量 II

Perl 引用的知识整理

Perl:标量,数组,哈希

Perl:如何解释数组和标量的否定?

您可以强制标量或数组 ref 成为 Perl 中的数组吗?

在标量上下文中展平 Perl 数组的方法