欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

用perl实现生物突变的随机模拟程序代码

程序员文章站 2022-04-10 22:26:03
程序文件:test.pl复制代码 代码如下:#!/bin/perl# filename:test.pluse strict;  use warnings;&nbs...

程序文件: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:\>