实验五 Perl语言基础
Posted 通达生信微学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验五 Perl语言基础相关的知识,希望对你有一定的参考价值。
1. Perl简介
ØPerl是Practical Extraction and Report Language的缩写,它是由Larry Wall设计,并由他不断更新和维护,用于在UNIX环境下编程。
ØPerl具有高级语言(如C)的强大能力和灵活性。与脚本语言一样,Perl不需要编译器和链接器来运行代码,你要做的只是写出程序并告诉Perl来运行而已。
ØPerl:第一个字母大写,指语言本身。
Øperl:全小写,指程序编译器。
ØPerl填补了低级语言(c, c++, 汇编)和高级语言(shell)之间空白。
2. Perl的安装与验证。
ØPerl安裝:一路按下一步即可。Perl验证:安装后打开cmd,输入:
perl –v,查看是否安裝成功。如果成功,会有perl的版本信息出來。
3. Perl的编辑器
ØPerl自身是不带编辑器的,它没有象其他语言那样的编辑编译环境。
Ø可以选择任何一种文本编辑器来编写Perl程序。象EditPlus、UtraEdit、NotePad、Dz-soft都行。
Ø也有专为调试Perl程序制作的编辑器,如PerlEdit等,它们界面直观、有的还带有Perl语法检查、可直接Run,而不用每次运行都键入命令行。
4.编写第一个脚本
Ø在D盘建立一个文件夹 “mypl”。
Ø打开文本编辑器notepad++ (https://notepad-plus-plus.org/), 选择perl语言,输入以下内容:print "Hello from ActivePerl! ",然后存盘到D:mypl est0.pl。
Ø在DOS窗口里输入:perltest0.pl。
看到窗口中打印出“Hellofrom ActivePerl!” 。
Ø其他样例perl脚本放在pl.zip压缩包中,解压缩后放在mypl文件夹中。
5. 数据结构和程序控制
写一个perl程序包括两个步骤:
Ø 把一系列指令写成一个文本文件。
Ø 运行解释器执行脚本或调试程序直到满足规划需要。
Perl脚本的几个特点:
Ø每行以分号结尾;
Ø字符串用双引号;
Ø字符串可以包含多个词;
Ø每条打印指令尾部的“ ”,用来在屏幕上转移到下一行。
ØPerl变量名称对大小写敏感, $foo和$Foo是两个不同的变量。
Ø注释:在语句的开头用字符#,如:
# this line is a comment
建议经常使用注释,使你的程序易读,这是好的编程习惯。
1)简单变量:简单变量就是一个数据单元,以字符$起始,可以是字符或字符串。下面是test1.pl代码。
test1 .pl的代码:
$var1=9;
$var2=7;
$product=$var1*$var2;
print “$product, ";
$sum=$var1+$var2;
print"$sum, ";
$remainder=$var1%$var2;
print"$remainder ";
执行test1.pl
Perl语言的变量不仅是数字还可以是一个字符串,还有其他形式。
test2.pl的代码。
$my_var=7;
print"$my_var ";
$my_var=7.321;
print"$my_var ";
$my_var="apple";
print"$my_var ";
执行test2.pl
操作符:
*、/、+、- |
乘、除、加、减 |
% |
取摸,含义为求余 |
++、-- |
增量或减量($var++ 表示给$var的数值加上1,$var--表示给$var的数值减去1) |
+=、-=、*=、/= |
代数运算的简写($var1 += 12相当于$var1=$var1+12 |
** |
求幂:$var**3是$var求立方 |
. |
字符串的连接:如果$var1= “hi”且$var2=“there”,则$var1 . $var= “hithere” |
x |
字符串的重复:$string= “hi”x3把$string的值设成“hihihi” |
逻辑运算符:
<,>,<=,>= |
数字比较。($x<$y)当$x的值小于$y的值时返回TRUE。<=和>=分别表示“小于等于”和“大于等于”。 |
Lt、gt、le、ge |
串的比较。($x lt $y) 当串$x根据字母表顺序在$y前面返回TRUE。 |
==、!= |
数字等值。==当两个参数在数字上相等,返回TRUE。!=当变元不相等时返回TRUE。 |
eq、ne |
串等值。跟==和!=类似,只是对于串的比较。 |
&&、|| |
联合运算符。(test) &&(test)只有当两个括号里的检验结果都为TRUE的时候返回TRUE。(test) || (test)任何一个括号里的检验结果为TRUE时返回TRUE。 |
! |
逻辑“非”运算。!(test)当括号里的检验结果为FALSE时返回TRUE。 |
下面是test3.pl的代码:一个代数运算简写的例子:
#!/usr/bin/perl
$var1=12;
$var1+=12;
print"$var1 ";
执行:test3.pl
这里,$var1+=12相当于$var1=$var1+12
2. 程序控制
计算机真正的能力在于它作出决定的本领,而不是仅仅计算。所有编程语言都提供程序控制的机制,即,如果一个条件为真,执行一套指令,否则执行另外一套。
在Perl里,程序控制通过if语句和循环语句来实现的。首先,需要了解Perl的结构代码的基本单位:语句和程序块。
Ø语句:一条语句表示一个指令,以分号结尾。无论语句的长度是1行还是几行。
$total_annual_sales = $first_quarter_total + $second_quarter_total + $third_quarter_total;
Ø程序块:是一组用花括号括起来的语句。以开括号{起始,以闭括号}结束。
2-1 条件执行
If语句是Perl语言条件执行的常用机制。下面的例子计算绝对值。
test4 .pl的代码:
$abs_x="";
$x=-7;
$abs_x=$x;
if ($abs_x<0) {$abs_x *= -1;}
print"$abs_x";
执行:test4.pl
运用elsif语句可以包含附加条件。else表示否则。
test5 .pl的代码:
$species = 'Human';
if ($species eq 'Human') {
print "Your species is Human ";
}
###########
$species = 'Mouse';
if ($species eq 'Human') {
print "Your species is Human";
} elsif ($species eq 'Mouse') {
print "Your species is Mouse ";
}
###########
$species = 'ZebraFish';
if ($species eq 'Human') {
print "Your species is Human";
} elsif ($species eq 'Mouse') {
print "Your species is Mouse";
} else {
print "Your species is not Human or Mouse! ";
}
执行test5.pl
每个比较和等值运算符,有数字(>,<,<=等)和串(Lt, ge, le等)。注意比较数字还是串。
test6.pl的代码:
$var1="0012.0";
$var2="12";
if ($var1==$var2){print"true, ";}
else
{print"false";}
if ($var1 eq $var2){print"true";}
else
{print"false";}
执行test6.pl
使用&&和||联合条件。
test7.pl的代码:
$test_var = 18;
if (($test_var > 12) && ($test_var < 24)) {
print "Your variable is between 12 and 24!";
}
执行test7.pl
2-2 循环
具备执行一个代码块的能力,按照一个确定的次数重复执行,也可以执行到符合某个条件为止。常用的两个循环语句是while循环和for循环。
test8.pl的代码:
$test_var = 0;
while ($test_var < 5) {
print "Variable is $test_var ";
$test_var ++;
}
执行test8.pl
for循环对于一个程序块执行固定的次数。
test9.pl的代码:
$test_var = 0;
for ($test_var =0; $test_var < 5; $test_var ++) {
print "Variable is $test_var "; }
执行test9.pl
注意:for语句括号里的表达式由三个部分组成,并用分号隔开。过程如下:
Ø第一部分,$test_var =0, 到达for语句时立即执行;
Ø检验第二部分,$test_var < 5,符合,条件代码被执行,不符合跳过程序块,执行后面代码;
Ø执行最后一部分,$test_var ++;Ø检验第二部分,为真,继续执行,直到为假。然后执行条件程序块后面代码。
Perl提供的最后一个循环语句:foreach
test10.pl的代码:
foreach $test_var (7,3,-3,5,2) {
print "Variable is $test_var "; }
执行test10.pl
3. 数组变量arrays
数组是可存贮多个值的变量。通过使用一个数组可以用1个变量存贮1000个数字。Perl的一个数组变量以符号@开头。对于这个1000个数字的数组,可以使用名为@numbers的数组。注意,数组的每个元素是一个普通的简单变量值。第一次访问数组里的一个元素,比如@numbers[3]=5,数组@numbers就被创建了。
l $numbers 包含一个值的简单变量;
l@numbers 包含很多值的一个数组变量;
l$numbers[3] 数组@numbers里的一个元素。
test11.pl的代码:
@dna_seqs = ("ACTG", "CCGGC", "CGCGC"); # a 3-element array
@more_dna = qw(ACTG CCGGC CGCGC ATGAAA); # a 4-element array
@other_array = (); # create an empty array
$other_array[0] = 'ACTG'; # add 'ACTG' as the 1st element in array
$other_array[2] = 'ENSMUSG01465'; # 'ENSMUSG01465' comes next
$other_array[3] = '56.7'; # then '56.7'
print "@dna_seqs ";
print "@other_array ";
执行test11.pl
test12.pl的代码:
@dna = qw(ACTG GGCG AAAA TTTG);
print "Here's a single element: ";
print $dna[2] . " ";
print "Here's the whole array: ";
print "@dna ";
执行test12.pl
qw()是用来指定了很多小单引号的句字,是一个快速的方法。例如,qw(foobar baz) 相当于('foo','bar', 'baz')。一些程序员认为,使用qw使Perl脚本更容易阅读。实际上,你可以使用任何分隔符,而不仅仅是括号。简单地,可以使用qw()准备一个数组,如以下所示的例示:
test13.pl的代码:
@array = qw(This is a list of words without interpolation);
foreach $key (@array){
print"Key is $key ";
}
执行test13.pl
STDIN:Perl的标准输入
test14.pl的代码:的代码的:
for ($i=0; $i<10; $i++) {$numbers [$i] = <STDIN>;}
$sum=0;
for ($i=0; $i<10; $i++) {$sum += $numbers[$i];}
$average=$sum / 10.0;
print "$average "
执行test14.pl
4. 哈希表hash
哈希表是Perl提供的最有用的数据结构之一,也是特别为生物信息学应用服务的。一个哈希表和一个数组类似,但它的索引不仅限于整数,而可以用任何数字的或字符串的值来选择或索引它的元素。与数组一样,哈希表的每个元素都是普通的简单变量,所以使用它的时候用一个美元符号。提到整个哈希表时,在名字前加一个%号。
注意:哈希表的索引用大括号包含。
test15.pl的代码:
%genetic_code = (
'GCU' => 'Ala',
'AAA' => 'Lys',
'GCA' => 'Ala'
);
print $genetic_code{'AAA'}; # This prints the value 'Lys'
执行test15.pl
test16.pl的代码:
%rna_triplets; # declare empty hash
$rna_triplets{'UAG'} = 'stop'; # This adds the key/value of UAG/stop
$rna_triplets{'GCC'} = 'Ala';
# delete $rna_triplets{'UAG'}; # deletes the UAG/stop entry
print $rna_triplets{'GCC'}." ";
print $rna_triplets{'UAG'};
执行test16.pl
test17.pl的代码:
%genetic_code = (
'GCU' => 'Ala',
'AAA' => 'Ala',
'GCA' => 'Ala'
);
$genetic_code{'AAA'} = 'Lys'; # We replace 'Ala' with 'Lys' as this is the
# correct translation.
print $genetic_code {'AAA'};
执行test17.pl
实验报告:
解释test12.pl, test13.pl, test14.pl 和test15.pl语句的含义。写在作业本上。
以上是关于实验五 Perl语言基础的主要内容,如果未能解决你的问题,请参考以下文章
2017-2018-1 《信息安全系统设计基础》实验五 通信协议设计
20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础