perl-學(xué)習(xí)筆記

獲得的新知識點

取模(取余數(shù)):%
乘冪:**
字符串必須使用“”或‘’(‘’號內(nèi)的轉(zhuǎn)義符失效)
連接符:.
重復(fù)符:x吻贿,例如5x3結(jié)果為“555”


標量變量
變量賦值

=表示賦值。
==表示等于,判斷語句中常出現(xiàn)窝稿。
+=表示雙目操作符祝闻,用于少些一個變量奕谭,例如$a=$a+1等效于a+=1,等效于a.=1(但是此常用于字符串的連接中)仪缸。

操作符號優(yōu)先級(從上至下一次遞減):
操作符
比較操作符:
比較操作符

特殊的標量:$_(perl中未指明變量時贵涵,默認為此變量)
回車和換行符:
linux系統(tǒng)下?lián)Q行:\n
mac系統(tǒng)下回車:\r
window西歐統(tǒng)下回車加換行符:\r\n


不同系統(tǒng)下?lián)Q行符切換命令

chomp():去除行為換行符,如果沒有則不起作用
chop:去除結(jié)尾的一個字符,每次運行都會去除行末的一個字符

數(shù)組和列表

@array=[1,2,3,4,5];
#perl中數(shù)組角標從0開始独悴,這點與其他語言不同,其他都相同
$array[0]=1;
$array[4]=5;
#數(shù)組中最后一個元素角標
$#array;
#數(shù)組元素個數(shù)統(tǒng)計
$#array+1锣尉;

構(gòu)建數(shù)組和列表

#".."表示范圍操作符刻炒,每次加1
#定義數(shù)組使用@符號
@number=(1..100);
print "@number\n";
#qw操作符,可以省略逗號
@strings=qw (abs is arrbre of alarm boo strick);
#split和join函數(shù)
@abc="ab:de:g:h";
#使用split將數(shù)組以:進行分割
@array = split /:/,$abc,4;
print "@array\n";
#join相當(dāng)于膠水自沧,將數(shù)組@array中的字符以TAB連接成新的數(shù)組
$new_abc=join "\t',@array;

數(shù)組的操作函數(shù)

@abc=(1..5);
#pop函數(shù)會彈出數(shù)組中最后一個元素彈出
$value=pop @abc坟奥;
#在數(shù)組中添加一個元素
push @abc,5;
#shift表示去除首個元素
$value_2=shift @abc
#unshift表示將某個元素添加到首個元素
unshift @abc,1;
#sort表示排序
@number_sort=sort (@abc);
#reverse表示反向排序,既可以操作數(shù)組拇厢,也可以操作變量
@number_re_sort=reverse sort (@abc);
#####遍歷數(shù)組
foreach $num (@abc) {
print "$num\n";
}

perl幫助文檔

perldoc -h #用于查看perl的幫助文檔爱谁,也可以直接到官網(wǎng)(perl.org)查看或下載相應(yīng)的文檔。

數(shù)據(jù)的輸入和輸出

#IN或OU孝偎,文件句柄访敌;文件名用雙引號括住
open IN,"<gene.ffn";
open OU,">protein.fea";
cds2pep.pl #該腳本包含程序$0,并讀取命令行的三個參數(shù)
#運行改腳本的命令行如下:
perl cds2pop.pl 參數(shù)1(輸入文件) 參數(shù)2(輸出文件) 參數(shù)3(轉(zhuǎn)換文件)
#######程序錯誤提示命令
-w
use warning
die 該命令會在出錯時終止命令衣盾,上述兩個則只會提出出錯位置寺旺,而不會停止命令
#讀取文件數(shù)據(jù)并將期輸出到指定文件的的腳本
open IN,"<$ARGV[0]";
open OU,">$ARGV[1]";
$/=">"; #使用>作為分隔符
while (<IN>) {
print OU "$_\t";
}
close IN;
close OU;

解壓gz文件格式轉(zhuǎn)換(fq2fa)程序

#!/usr/bin/perl -w
open IN,"zcat $ARGV[0] |";
open OU,$ARGV[1]";
while ($id=<IN>) {
chomp ($id);
chomp($seq=<IN>);
<IN>;
<IN>; #已經(jīng)將4行轉(zhuǎn)換為2行
$id=~ tr /@/>/;
print OU "$id\n";
print OU "$seq\n";
}
close IN;
close OU;

哈希

相比于數(shù)組(以唯一的角標進行數(shù)據(jù)的讀仁凭觥)的優(yōu)勢阻塑,可以直接以唯一的字符串對文件進行檢索
哈希變量使用%
%abc=("a",1,"b",2,"c",3); #健(a)對值(1)
%abc=(
"a"=>1,
"b"=>2,
"c"=>3,
);

use Data::Dumper #用于打印的模塊
%hash=(); #清空哈希的方法:定義一個新哈希
例子:
open IN,"$ARGV[0]";
while (<IN>) {
chomp;
@line=split /\s+/,$;
$hash($line[0])=$line[1];
}
close IN;
print Dumper (%hash);
#其他hash函數(shù)
@key=keys %hash;
@value=values %hash;
print "@key\n";
print "@values\n";
@temp = sort keys %hash
#返回hash鍵對值的while方法
foreach (@temp) {
print "$
\n";
print "$hash{$_}\n";
}
#刪除hash中的某個元素
delete $hash(元素名);

序列提取

use strict;
use Data::Dumperl;
if (scalar @ARGV==0) {
die "Usage: This program is used to get gene sequence by a list
perl $0 <id list> <fasta file>\n";
my %hash=();
open IN,"$ARGV[0]";
while (<IN>) {
chomp;
$hash=($)=1; #給鍵值賦為1
}
close IN;
open FA,"<$ARGV[1]";
$/=">";<FA>;
while (<FA>) {
chomp;
my $id=(split /\n/,$
,2);
if (exists $hash{$id}) {
print "$_";
} else {
next;
}
print "$id\n";
}
close FA;

子程序(自定義函數(shù))及其調(diào)用

use strict #編譯中使用嚴格的標準果复,使用的情況陈莽,當(dāng)代碼量超過1個頁面時。
sub sum {
@_
my $sum1=shift @;
my $sum2=shft @
; #程序塊
my $total=$sum1+$sum2;
return $total;
}
my $total=&sum (3,2);
&程序名 #調(diào)用

例子:使用子程序計算fasta文件中的基因數(shù)目和平均序列長度虽抄,子程序如下:

use strict;
open IN,"<$ARGV[0]";
while (<IN>) {
chomp;
my ($id,$file) =(split /=/,$_)[0,1];
my ($gene_num,$gene_length)=&gnen_stat ($file);
}
colse IN;
sub gene_stat {
my $file=shift @_;
my $gene_num=0;
my $genelength=0;
open FA, "$file";
while (<FA>) {
chomp;
if (/^>/) {
$genenum+=1;
} else {
my $len=length ($_);
}
}
close FA;
my $avg_length=$genelength/$genenum;
return $genenum, $avg_length;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末走搁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子迈窟,更是在濱河造成了極大的恐慌朱盐,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菠隆,死亡現(xiàn)場離奇詭異兵琳,居然都是意外死亡,警方通過查閱死者的電腦和手機骇径,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門躯肌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人破衔,你說我怎么就攤上這事清女。” “怎么了晰筛?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵嫡丙,是天一觀的道長拴袭。 經(jīng)常有香客問我,道長曙博,這世上最難降的妖魔是什么拥刻? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮父泳,結(jié)果婚禮上般哼,老公的妹妹穿的比我還像新娘。我一直安慰自己惠窄,他們只是感情好蒸眠,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著杆融,像睡著了一般楞卡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上脾歇,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天臀晃,我揣著相機與錄音,去河邊找鬼介劫。 笑死徽惋,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的座韵。 我是一名探鬼主播险绘,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼誉碴!你這毒婦竟也來了宦棺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤黔帕,失蹤者是張志新(化名)和其女友劉穎代咸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體成黄,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡呐芥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了奋岁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片思瘟。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闻伶,靈堂內(nèi)的尸體忽然破棺而出滨攻,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布光绕,位于F島的核電站女嘲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏诞帐。R本人自食惡果不足惜欣尼,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望景埃。 院中可真熱鬧,春花似錦顶别、人聲如沸谷徙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽完慧。三九已至,卻和暖如春剩失,著一層夾襖步出監(jiān)牢的瞬間屈尼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工拴孤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脾歧,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓演熟,卻偏偏與公主長得像鞭执,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芒粹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容