用perl实现生物突变的随机模拟程序代码
程序文件:test.pl
#!/bin/perl
# filename:test.pl
use strict;
use warnings;
#随便找一个比较好识别的序列
my $dna="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n";
my $i;
my $mutant;
srand(time|$$);
$mutant=mutate($dna);
print "mutate \n". $dna;
print "here is the original dna:\n";
print "$dna\n";
print "here is the mutant dna:\n\n";
print "$mutant\n";
print "here are 10 more successive mutations:\n";
for ($i=0;$i<10;++$i)
{
$mutant=mutate($mutant);
print "$mutant\n";
}
#子程序:根据序列的长度定义一个随机位置的子程序
sub randomposition
{
my($string)=@_;
return int(rand(length($string)));
}
#子程序:从一个数组中随机选取一个元素
sub randelement
{
my(@array)=@_;
return $array[rand @array];
}
#子程序:引用上面的子程序,从atgc四个碱基中随机选取一个
sub randomnucleotide
{
my (@nucleotides)=qw/a t g c/;
return randelement(@nucleotides);
}
#子程序:生成突变的子程序
sub mutate
{
my($dna)=@_;
my(@nucleotides)=qw(a t g c);
my($position)=randomposition($dna);
my($newbase)=randomnucleotide(@nucleotides);
substr($dna,$position,1,$newbase);#substr($string,$initial_position,$length,replacement substring)
return $dna;
}
结果如下:
f:\>perl\test.pl
mutate
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
here is the original dna:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
here is the mutant dna:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaa
here are 10 more successive mutations:
acaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaa
acaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaataaaaaaaaaaaaaaa
acaaaaaaaaacaaaaaaaaaaaaataaaaaaaaaaaaaaataaaaaaaaaaaaaaa
acaaaaaaaaacaaaaaaaaaaaaataaaaaaaaaaaaaaataaaaaaaaaaaaaaa
acaaaaaaaaacaaaaaaaaaaaaataaaaaaaaaaaaaaataaaaaaaaaaaaaaa
acaaaaaaaaacaaaaaaaaaaaaataaaaaaaaaaaaaaatgaaaaaaaaaaaaaa
actaaaaaaaacaaaaaaaaaaaaataaaaaaaaaaaaaaatgaaaaaaaaaaaaaa
actaaaaaaaacaaaaaaaaaaaaataagaaaaaaaaaaaatgaaaaaaaaaaaaaa
actaaaaaaaacaaaaaaaaaaaaataagaaaaaaaaaaaatgtaaaaaaaaaaaaa
actaaaaaaaacaaaaaaaaaaaaataagaaaaaaaaaaaatgtaaaaaaaaaaaaa
f:\>