《Perl語言程序設(shè)計:第1章 Perl語言簡介》由會員分享,可在線閱讀,更多相關(guān)《Perl語言程序設(shè)計:第1章 Perl語言簡介(52頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、課程考核方式課程考核方式n課程出勤率:20%n上機作業(yè):20%n課程項目:20%n期末筆試考試:40%nPerl:Python =3:1第一章 Perl語言簡介什么是PerlnPerl被稱為“實用報表提取語言”(Practical Extraction and Report Language),借取了C、sed、awk、shell script以及很多其他程序語言的特性,由Larry Wall于1987年設(shè)計發(fā)表,并由他不斷更新維護的編程語言。Perl哲學(xué)Theres More Than One Way To Do It.There should be one and preferably o
2、nly one obvious way to do it.Perl語言的優(yōu)缺點優(yōu)點n易學(xué)代碼簡單靈活n易于處理文本信息n強大的正則表達式和模式匹配功能n易于和其他程序語言結(jié)合 缺點n代碼不優(yōu)美n不便于數(shù)值計算n對于CPU的消耗較高,效率低n編程錯誤不易于發(fā)現(xiàn)Perl的獲取與安裝nWindows Strawberry Perl(http:/ (http:/ wget http:/www.cpan.org/src/5.0/perl-5.18.0.tar.gz tar zxvf perl-5.18.0.tar.gzcd perl-5.18.0./Configure-des-Dprefix=/usr/
3、bin/perl(指定安裝目錄)makemake testmake install 檢查Perl是否安裝成功Perl的幫助功能Perl編輯工具n普通文本編輯:notepad,vinIDE(Integrated Development Environment):Ultraedit,Komodo,Perl Dev KitnCGI(Common Gateway Interface):perl buider,perl edit,top perl studioCPAN(Comprehensive Perl Archive Network)PerlchinaBioperlPerl語言的主要內(nèi)容n變量類型n
4、控制結(jié)構(gòu)n子程序n文件的操作n正則表達式n智能匹配n字符串的操作n輸入與輸出n進程的管理n第三方模塊的使用n第一個Perl程序n在屏幕上打印“Hello,world!”,并將代碼保存于my_program.pl#!/usr/bin/perl print Hello,world!n;“#!”表示執(zhí)行默認(rèn)目錄下的程序$chmod 777 my_program.pl$perl my_program.pl OR./my_program.pln相應(yīng)的C代碼#includeint main()printf(“Hello,world!n”);Perl中的程序注釋n單行注釋以#開頭的行都被perl認(rèn)為是注釋。
5、例如:$a=$b+$c;#calculate the sum of$b and$c;n多行注釋最常用的方法是使用 POD(Plain Old Documentations)來進行多行注釋。例如:=pod codes to comment=cut Perl中的數(shù)據(jù)類型nscalar:標(biāo)量,以$開始,后面以字母或_開頭,接下來可以是字母或數(shù)字,如$val,$_name;narray:數(shù)組,列表,以開頭,如color,emailnhash:哈希,散列,以%開頭,如%protein_id,%gene_idnfile handle:文件句柄,通常用大寫字母來標(biāo)明句柄類型 npointer:指針,變量前加
6、反斜杠$pointerto=$var13 注意:變量命名時需區(qū)分大小寫標(biāo)量變量 n整型 十進制:$var0=12345;八進制:$var1=047;#以0開頭,等于十進制的39十六進制:$var2=0 x1f;#以0 x開頭,等于十進制的31 二進制:$val3=0b11111111;#以0b開頭,等于十進制的255不同進制間的轉(zhuǎn)換n浮點型$val0=11.4;$var1=-0.3;$val2=.3;$val3=54.1e+02;注意:浮點寄存器通常不能精確地存儲浮點數(shù),在運算中可能會出現(xiàn)誤差。#!/usr/local/bin/perl$value=9.01e+21+0.01-9.01e+21
7、;print(The first value is,$value,n);$value=9.01e+21-9.01e+21+0.01;print(The second value is,$value,n);數(shù)字格式n字符串字符串通常是由可打印的字母數(shù)字及標(biāo)點符號組成,其范圍介于ASCII編碼的32到126之間。與C語言不同,字符串的末尾并不含有隱含的NULL字符。單引號字符串:$str1=;$str2=fred_123;$str3=hello,worldn;#n不是換行符,而表示字面意思雙引號字符串:$str1=“fred_123”;$str2=“hello,worldn”;#n是換行符$str
8、3=“coketsprite”;#coke,a tab(一個制表符),sprite雙引號支持簡單變量替換:$number=11;$text=This text contains the number$number.;則$text的內(nèi)容為:This text contains the number 11.字符串常用函數(shù)nindex函數(shù)$position=index($string,$substring,$offset)返回子串substring在字符串string中的位置,如果不存在則返回-1。參數(shù)offset是可選項,表示匹配從該位置開始匹配。$string=perlmeme.org;$cha
9、r1=l;$result=index($string,$char1);print Result:$resultn;$char2=m;$result=index($string,$char2,5);print Result:$resultn;$char3=L;$result=index($string,$char3);print Result:$resultn;nrindex函數(shù)$position=rindex($string,$substring,$offset);與index類似,區(qū)別是從右端匹配。$string=I can learn much from ;$loc=index($stri
10、ng,perlcn);print$locn;$loc=rindex($string,perlcn);print$locn;nlength函數(shù)$num=length($string);返回字符串長度,或者說含有字符的數(shù)目。$string=“who are you”;$length=length($string);nsubstr函數(shù)通過substr來存取子串:$value=substr($string,$offset,$count);$value=substr($string,$offset);通過substr修改子串:substr($string,$offset,$count)=$newstri
11、ng;substr($string,$offset)=$newtail;$string=This is what you have;$start=substr($string,5,2);print$start.n;$remain=substr($string,5);print$remain.n;substr($string,5,2)=wasnt;print$string.n;substr($string,4)=is a book;print$string.n;n大小寫轉(zhuǎn)換函數(shù)lc,將字符串改為小寫uc,將字符串改為大寫lcfirst,改變字符串首字母小寫ucfirst,改變字符串首字母大寫$l
12、ow=happy;$up=uc($low);print$up.n;$low1=lc($up);print$low1.n;$up_first=ucfirst($low1);print$up_first.n;$low_first=lcfirst($low1);print$low_first.n;常用操作符介紹n算術(shù)操作符n字符串操作符n賦值操作符n自增自減操作符n比較操作符n邏輯操作符n條件操作符n算術(shù)操作符n+(加)-(減)*(乘)/(除)*(乘冪)%(取模)-(單目負(fù))9+3,8-7,3*3,6/3,8*2,11%3,-4 注意:乘冪結(jié)果不能超出計算機表示的限制,如10*999999;取余的操
13、作數(shù)如不是整數(shù),取整后運算,如10.5%3=1。變量之間的算術(shù)練習(xí):假定已分析了200條蛋白質(zhì)序列,其中21條為新測序序列,求新序列所占比例。#!/usr/bin/perl$analyzed_sequences=200;$new_sequences=21;$percent=($new_sequences/$analyzed_sequences)*100;print%of new sequences=$percent%;字符串操作符n連接操作符.hello.world#同于 helloworldhello.world#同于 hello worldhello world.n#同于 hello wo
14、rldnn重復(fù)操作符 xfred x 3#fredfredfred5 x 4#等于 5 x 4,5555數(shù)字與字符串之間的轉(zhuǎn)換 視操作符而定,Perl會自動完成轉(zhuǎn)換。如表達式中使用字符串操作符,則將數(shù)字轉(zhuǎn)換成字符串;如表達式中使用數(shù)字操作符,所有字符串轉(zhuǎn)換成數(shù)字,但是字符串中的非數(shù)字部分會被忽略。“hello,”.12345#其結(jié)果為hello,12345 “12”*“3”#其結(jié)果為36“12fred34”*“3”#其結(jié)果仍為36 “Z”.5*7#等同于“Z”.35,得到“Z35”賦值操作符直接賦值:二元賦值:$a=5;$a+=5;$b=$b*3;$b*=3;$c=“thank”;$c.=“t
15、hank”;自增自減操作符n$a+,$a-,+$a,-$a$a=5;$b=+$a;$c=$a-;#$b 被賦予$a 自增之后的值,6#$c 被賦予 6,然后$a 自減為 5如果將自增(減)操作符放在變量的前邊,變量就成為“預(yù)增變量”,變量的值在它被賦值前改變。如果將其放在變量的后邊,被稱為“后增變量”,它在被賦值后改變。自增自減用于字符串n在Perl中+可用于字符串,當(dāng)結(jié)尾字符為z、Z、9時進位。$stringvar=abc;$stringvar+;print$stringvar,n;$stringvar=abz;$stringvar+;print$stringvar,n;n-用于字符串會怎樣
16、?$stringvar=abc;print$stringvar,n;printf(%dn,$stringvar);$stringvar-;print$stringvar;n如果字符串中含有非字母和非數(shù)字的字符,或數(shù)字位于字 母中,+運算將其轉(zhuǎn)換為數(shù)字零,因此結(jié)果為1$stringvar=ab*c;$stringvar+;print$stringvar,n;$stringvar=a5cd;$stringvar+;print$stringvar,n;邏輯操作符邏輯或:$a|$b 或$a or$b邏輯與:$a&$b 或$a and$b邏輯非:!$a 或 not$a邏輯異或:$a xor$b比較操作符
17、判斷下列表達式的真假35.0=35,35=35,35 ne 35hello eq“hello”,hello eq Hello,hello gt world條件操作符n條件?值1:值2,實際上為if-else語句的簡寫方式,當(dāng)條件為真時取值1,為假時取值2$result=0?14:7;print$resultn;$result=$var=0?14:7;print$resultn;操作符的優(yōu)先級判斷以下表達式的結(jié)合性n$a=4+5+6;#從左到右n$a=2*3*2;#從右到左n$a=81/9*9;#從左到右n$a=$b=1;#從右到左n$a=$b+=1;#從右到左操作符的結(jié)合性if控制結(jié)構(gòu)nif-
18、else結(jié)構(gòu)$name=royal;if($name gt fred)print$name comes after fred in sorted order.n;elseprint$name does not come after fred.n;注意:perl 中的語句模塊必須加花括號nIf-elsif結(jié)構(gòu)$age=18;if($age 16)print Hi,Juniorn;elsif($age 17)print You can see movien;elsif($age 18)print You can learn to driven;else print Go and Vote and
19、then have a beer.n;n倒置的if語句格式:expression if(condition);布爾值布爾值nPerl沒有專用的布爾值,任何標(biāo)量值都可以為if控制結(jié)構(gòu) 里的判斷條件。n數(shù)字0為假,其他數(shù)字為真。n空字符串()為假,其他字符串為真。n如果既不是數(shù)字也不是字符串,先轉(zhuǎn)換成數(shù)字或字符串再 進行判斷,這意味著undef變量為false。n字符串0跟數(shù)字0是同一個標(biāo)量,字符串0是唯一被當(dāng)作 假的非空字符串。while控制結(jié)構(gòu)$count=0;while($count 10)$count+=2;print“count is now$countn”;#打印小于10的偶數(shù)如何跳出
20、while循環(huán)nlast:類似于C中的break,跳出循環(huán),執(zhí)行下面的代碼。next:類似于C中的continue,都是跳到下一次循環(huán)。獲取用戶輸入用n用于用戶從鍵盤輸入$line=;if($line eq“n”)print“That was just a blank line!n”;elseprint“That line of input was:$line”;chomp函數(shù)nchomp()作用是將換行符“n”去掉,最常用方法:$text=;chomp$text;chomp($text=);#讀入,但不含換行符 nchomp是一個函數(shù)。作為一個函數(shù),它有一個返回值,為移除字符的個數(shù)。#!/u
21、sr/bin/perl$string1=This is test;$retval =chomp($string1);print Choped String is:$string1n;print Number of characters removed:$retvaln;$string1=This is testn;$retval =chomp($string1);print Choped String is:$string1n;print Number of characters removed:$retvaln;chop函數(shù)nchop()用于移除字符串的最后一個字符,其返回值為被移除的字符#
22、!/usr/bin/perl$string1=This is test;$retval =chop($string1);print Choped String is:$string1n;print Content of characters removed:$retvaln;$string1=This is testn;$retval =chop($string1);print Choped String is:$string1n;print Content of characters removed:$retvaln;undef值undef就是undefined,表示未定義的變量,強調(diào)變量被初次賦值之前的狀態(tài)。在使用新變量時,perl將視其為undef,然后依據(jù)上下文將變量作為0或者空串使用。defined函數(shù)函數(shù)該函數(shù)可以判斷某個字符串是undef還是空串。如果是undef,該函數(shù)返回假,否則返回真。常用來檢驗輸入是否結(jié)束。$input=;if(defined($input)print The input was$input;elseprint No input available!n;