open FA, "$ARGV[0]";
print"Plz,input your primer length (In integers).\n";
$PL= <STDIN>;
chomp $PL;
print"Plz,input your start position(In integers).\n";
$start= <STDIN>;
print"Plz,input your end position(In Integers).\n";
$end= <STDIN>;
chomp $end;
print"Plz,input your lowest TM value(In Integers).\n";
$LTM=<STDIN>;
chomp $LTM;
print"Plz,input your highest TM value(In Integers).\n";
$HTM=<STDIN>;
chomp $HTM;
$/=">"; #以>进行全局分割,必须放在<STDIN>之后,否在不能停止输入。
<FA>;
while(<FA>){
chomp;
next,if($_=~/^$/); #忽略空行
my($ID,$target)=split /\n/, $_,2;
$target=~s/\n//g;
#print"$seq\n";
$seq=substr($target,$start,($end-$start));
$len=length($seq);
#print"$seq\t$len\n";
$n=0;
print"Below is the selected primers for you:\n";
for($i=0;$i<($len-$PL)+1;$i+=1){
$primer=substr($seq,$i,$PL);
#print"$primer\n";
@array=split //,$primer;
#print"@array\n";
%hash=();
$TM=0;
foreach(@array){
$hash{"A"}+=1,if($_ eq "A");
$hash{"T"}+=1,if($_ eq "T");
$hash{"G"}+=1,if($_ eq "G");
$hash{"C"}+=1,if($_ eq "C");
}
#@A=values %hash;
#print"@A\n";
$TM=4*($hash{"G"} + $hash{'C'})+ 2*($hash{"A"} + $hash{"T"});
#print"$TM\n";
if($TM>=$LTM && $TM<=$HTM){
$n+=1;
print"$ID\tprimer$n:$primer\n";
}
}
}
输入数据:

image.png
输出数据:

image.png
网友评论