实验五 Perl语言基础

Posted 通达生信微学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实验五 Perl语言基础相关的知识,希望对你有一定的参考价值。


1. Perl简介


ØPerlPractical 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的版本信息出來。


实验五 Perl语言基础(一)



3. Perl的编辑器

ØPerl自身是不带编辑器的,它没有象其他语言那样的编辑编译环境。

Ø可以选择任何一种文本编辑器来编写Perl程序。象EditPlusUtraEditNotePadDz-soft都行。

Ø也有专为调试Perl程序制作的编辑器,如PerlEdit等,它们界面直观、有的还带有Perl语法检查、可直接Run,而不用每次运行都键入命令行。


4.编写第一个脚本

ØD盘建立一个文件夹 “mypl”。

Ø打开文本编辑器notepad++ (https://notepad-plus-plus.org/), 选择perl语言,输入以下内容:print "Hello from ActivePerl! ",然后存盘到D:mypl est0.pl。


实验五 Perl语言基础(一)


ØDOS窗口里输入:perltest0.pl

      看到窗口中打印出“Hellofrom ActivePerl!”


实验五 Perl语言基础(一)


Ø其他样例perl脚本放在pl.zip压缩包中,解压缩后放在mypl文件夹中。


实验五 Perl语言基础(一)



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语言基础(一)

      Perl语言的变量不仅是数字还可以是一个字符串,还有其他形式。


test2.pl的代码。

$my_var=7;print"$my_var
";$my_var=7.321;print"$my_var
";$my_var="apple";print"$my_var
";

执行test2.pl

实验五 Perl语言基础(一)



操作符:

*、/+-

乘、除、加、减

%

取摸,含义为求余

++--

增量或减量($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

实验五 Perl语言基础(一)

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

实验五 Perl语言基础(一)


运用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

实验五 Perl语言基础(一)


每个比较和等值运算符,有数字(>,<,<=等)和串(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

实验五 Perl语言基础(一)

使用&&||联合条件。

test7.pl的代码:

$test_var = 18;if (($test_var > 12) && ($test_var < 24)) { print "Your variable is between 12 and 24!";}

执行test7.pl

实验五 Perl语言基础(一)

2-2 循环

      具备执行一个代码块的能力,按照一个确定的次数重复执行,也可以执行到符合某个条件为止。常用的两个循环语句是while循环和for循环。


test8.pl的代码:

$test_var = 0;while ($test_var < 5) { print "Variable is $test_var 
"; $test_var ++;}

执行test8.pl

实验五 Perl语言基础(一)


for循环对于一个程序块执行固定的次数。

test9.pl的代码:

$test_var = 0;for ($test_var =0; $test_var < 5; $test_var ++) { print "Variable is $test_var 
"; }

执行test9.pl

实验五 Perl语言基础(一)

注意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


实验五 Perl语言基础(一)


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

实验五 Perl语言基础(一)


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

实验五 Perl语言基础(一)


     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

实验五 Perl语言基础(一)


STDINPerl的标准输入

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

实验五 Perl语言基础(一)

4. 哈希表hash

   哈希表是Perl提供的最有用的数据结构之一,也是特别为生物信息学应用服务的。一个哈希表和一个数组类似,但它的索引不仅限于整数,而可以用任何数字的或字符串的值来选择或索引它的元素。与数组一样,哈希表的每个元素都是普通的简单变量,所以使用它的时候用一个美元符号。提到整个哈希表时,在名字前加一个%号。

  注意:哈希表的索引用大括号包含。


test15.pl的代码:

%genetic_code = ( 'GCU' => 'Ala', 'AAA' => 'Lys', 'GCA' => 'Ala');print $genetic_code{'AAA'}; # This prints the value 'Lys'

执行test15.pl

实验五 Perl语言基础(一)

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 entryprint $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语言基础的主要内容,如果未能解决你的问题,请参考以下文章

201555332盛照宗—网络对抗实验1—逆向与bof基础

2017-2018-1 《信息安全系统设计基础》实验五 通信协议设计

20155201 李卓雯 《网络对抗技术》实验一 逆向及Bof基础

《信息安全系统设计基础》实验五

2017-2018-1 20155317《信息安全系统设计基础》 实验五 通讯协议设计

汇编语言——实验五