Perl——哈希&数据结构
Posted 懒癌终结君
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl——哈希&数据结构相关的知识,希望对你有一定的参考价值。
4、哈希
例如:身份证号(键)不能重复,而名字(值)可以重复。
第一排:哈希赋值一对一对的,前两个,第一个是键,第二个是值。
左边:给哈希赋值的清楚版本,一般为了避免错误都会采用这个,而不是第一排。
右边:经常在使用中,会先创建一个哈希,之后再赋值。
#!/usr/bin/perl -w
use strict;
my %aa=(
'GCA' => 'A', 'GCC' => 'A', 'GCG' => 'A',
'TGC' => 'C', 'TGA' => 'C',
'GAC' => 'D', 'GAT' => 'D'
); #创建一个哈希,这个是密码子表,太多后面没打完
my $keys = keys%aa; #看看有几个元素
print "$keys
";
my @keys = keys(%aa); #把密码子输出,并按照字母倒序排列
foreach my $keys(sort {$b cmp $a}@keys){
print "$keys
";
}
while (my($keys , $values) = each%aa){
print "key: $keys value: $values
";
} #输出键和值,keys是输出键,values是输出值
my $recode = exists$aa{"GCA"}; #检查GCA是否存在
print "$recode
";
delete$aa{"GCA"}; #删掉GCA
$recode = exists$aa{"GCA"}; #再次检查GCA是否存在
print "$recode
";
$aa{"GCA"} = 'A'; #把GCA添加上去
$recode = exists$aa{"GCA"}; #recode之前定义了,就不用再定义,不用加my
print "$recode
";
sqc@DESKTOP-IUM4B9V:~$ perl hash.pl
7
TGC
TGA
GCG
GCC
GCA
GAT
GAC
key: GCA value: A
key: GCC value: A
key: GCG value: A
key: GAT value: D
key: GAC value: D
key: TGA value: C
key: TGC value: C
1
1
例题:从键盘输入一个密码子,打印对应的氨基酸
#!/usr/bin/perl -w
use strict;
my %aa=(
'GCA' => 'A', 'GCC' => 'A', 'GCG' => 'A',
'TGC' => 'C', 'TGA' => 'C',
'GAC' => 'D', 'GAT' => 'D'
);
print "Please input a code: ";
my $code = <STDIN>; #屏幕输入
print "$code => aa :$aa{$code}
";
sqc@DESKTOP-IUM4B9V:~$ perl hash.pl
Please input a code: GCA
Use of uninitialized value in concatenation (.) or string at hash.pl line 14, <STDIN> line 1.
GCA
=> aa :
sqc@DESKTOP-IUM4B9V:~$
这里报错,因为输入的GCA
后面有个自动的换行符,所以需要去掉~
#!/usr/bin/perl -w
use strict;
my %aa=(
'GCA' => 'A', 'GCC' => 'A', 'GCG' => 'A',
'TGC' => 'C', 'TGA' => 'C',
'GAC' => 'D', 'GAT' => 'D'
);
print "Please input a code: ";
chomp(my $code = <STDIN>); #去掉换行符
print "$code => aa :$aa{$code}
";
sqc@DESKTOP-IUM4B9V:~$ perl hash.pl
Please input a code: GCA
GCA => aa :A
sqc@DESKTOP-IUM4B9V:~$
5、控制结构
条件控制语句
(1)if…else
#!/usr/bin/perl -w
use strict;
my $a = 1;
my $b = 5;
if($a > $b){
print "a > b
";
}elsif($a == $b){ #这里添加了一个elsif,
print "a == b
";
}else{
print "b > a
";
}
等号是==
,赋值是=
输出:
sqc@DESKTOP-IUM4B9V:~$ perl if.pl
b > a
(2)unless
理解成:除非…否则就怎么样…
#!/usr/bin/perl -w
use strict;
my $a = 6;
my $b = 5;
unless($a < $b){
print "a >= b
";
}
输出:
sqc@DESKTOP-IUM4B9V:~$ perl unless.pl
a >= b
(3)?:
简化的if…else
#!/usr/bin/perl -w
use strict;
my $a = 6;
my $b = 5;
$a > $b ? print "a>b
": print "a<=b
"; #a大于b吗?如果大于——执行:前面的;不大于——执行:后面的
输出:
sqc@DESKTOP-IUM4B9V:~$ perl unless.pl
a>b
循环控制语句
(4)for
#!/usr/bin/perl -w
use strict;
my @array = qw(a b c d e f g); #建立一个数组
for (my $i = 0; $i <= $#array; $i += 1){ #这个$#array代表最后以一个元素编号
print "element $i : $array[$i]
"; #输出对应的元素
}
输出:
sqc@DESKTOP-IUM4B9V:~$ perl for.pl
element 0 : a
element 1 : b
element 2 : c
element 3 : d
element 4 : e
element 5 : f
element 6 : g
(5)foreach
#!/usr/bin/perl -w
use strict;
foreach (@array){
print "$_
";
}
foreach my $a (@array){ #重新定义了一个a来赋值
print "$a
";
}
两种写法结果都一样,都
以上是关于Perl——哈希&数据结构的主要内容,如果未能解决你的问题,请参考以下文章