perl-学习笔记

获得的新知识点

取模(取余数):%
乘幂:**
字符串必须使用“”或‘’(‘’号内的转义符失效)
连接符:.
重复符:x,例如5x3结果为“555”


标量变量
变量赋值

=表示赋值。
==表示等于,判断语句中常出现。
+=表示双目操作符,用于少些一个变量,例如$a=$a+1等效于a+=1,等效于a.=1(但是此常用于字符串的连接中)。

操作符号优先级(从上至下一次递减):
操作符
比较操作符:
比较操作符

特殊的标量:$_(perl中未指明变量时,默认为此变量)
回车和换行符:
linux系统下换行:\n
mac系统下回车:\r
window西欧统下回车加换行符:\r\n


不同系统下换行符切换命令

chomp():去除行为换行符,如果没有则不起作用
chop:去除结尾的一个字符,每次运行都会去除行末的一个字符

数组和列表

@array=[1,2,3,4,5];
#perl中数组角标从0开始,这点与其他语言不同,其他都相同
$array[0]=1;
$array[4]=5;
#数组中最后一个元素角标
$#array;
#数组元素个数统计
$#array+1;

构建数组和列表

#".."表示范围操作符,每次加1
#定义数组使用@符号
@number=(1..100);
print "@number\n";
#qw操作符,可以省略逗号
@strings=qw (abs is arrbre of alarm boo strick);
#split和join函数
@abc="ab:de:g:h";
#使用split将数组以:进行分割
@array = split /:/,$abc,4;
print "@array\n";
#join相当于胶水,将数组@array中的字符以TAB连接成新的数组
$new_abc=join "\t',@array;

数组的操作函数

@abc=(1..5);
#pop函数会弹出数组中最后一个元素弹出
$value=pop @abc;
#在数组中添加一个元素
push @abc,5;
#shift表示去除首个元素
$value_2=shift @abc
#unshift表示将某个元素添加到首个元素
unshift @abc,1;
#sort表示排序
@number_sort=sort (@abc);
#reverse表示反向排序,既可以操作数组,也可以操作变量
@number_re_sort=reverse sort (@abc);
#####遍历数组
foreach $num (@abc) {
print "$num\n";
}

perl帮助文档

perldoc -h #用于查看perl的帮助文档,也可以直接到官网(perl.org)查看或下载相应的文档。

数据的输入和输出

#IN或OU,文件句柄;文件名用双引号括住
open IN,"<gene.ffn";
open OU,">protein.fea";
cds2pep.pl #该脚本包含程序$0,并读取命令行的三个参数
#运行改脚本的命令行如下:
perl cds2pop.pl 参数1(输入文件) 参数2(输出文件) 参数3(转换文件)
#######程序错误提示命令
-w
use warning
die 该命令会在出错时终止命令,上述两个则只会提出出错位置,而不会停止命令
#读取文件数据并将期输出到指定文件的的脚本
open IN,"<$ARGV[0]";
open OU,">$ARGV[1]";
$/=">"; #使用>作为分隔符
while (<IN>) {
print OU "$_\t";
}
close IN;
close OU;

解压gz文件格式转换(fq2fa)程序

#!/usr/bin/perl -w
open IN,"zcat $ARGV[0] |";
open OU,$ARGV[1]";
while ($id=<IN>) {
chomp ($id);
chomp($seq=<IN>);
<IN>;
<IN>; #已经将4行转换为2行
$id=~ tr /@/>/;
print OU "$id\n";
print OU "$seq\n";
}
close IN;
close OU;

哈希

相比于数组(以唯一的角标进行数据的读取)的优势,可以直接以唯一的字符串对文件进行检索
哈希变量使用%
%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函数
@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;

子程序(自定义函数)及其调用

use strict #编译中使用严格的标准,使用的情况,当代码量超过1个页面时。
sub sum {
@_
my $sum1=shift @;
my $sum2=shft @
; #程序块
my $total=$sum1+$sum2;
return $total;
}
my $total=&sum (3,2);
&程序名 #调用

例子:使用子程序计算fasta文件中的基因数目和平均序列长度,子程序如下:

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;
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342

推荐阅读更多精彩内容