用perl在DNA序列中找到核苷酸

时间:2011-08-17 09:13:16

标签: perl bioinformatics

我有序列DNA,我想在人们选择的位置找到序列的核苷酸。以下是示例:

输入序列DNA: ACTAAAAATACAAAAATTAGCCAGGCGTGGTGGCAC(序列长度为33) 输入位置:(12)

我希望结果是核苷酸为AAA的第12位。

我找到该位置的氨基酸没有问题。以下是我目前的代码。

print "ENTER THE FILENAME OF THE DNA SEQUENCE:= ";
$DNAfilename = <STDIN>;
chomp $DNAfilename;
unless ( open(DNAFILE, $DNAfilename) ) {
  print "Cannot open file \"$DNAfilename\"\n\n";
}
@DNA = <DNAFILE>;
close DNAFILE;
$DNA = join( '', @DNA);
print " \nThe original DNA file is:\n$DNA \n";
$DNA =~ s/\s//g;

print" enter the number ";
$po=<STDIN>;

@pos=$DNA;
if ($po>length($DNA)) 
{
  print" no data";
}

else 
{
  print " @pos\n\n";
}

请告知我如何在DNA序列中找到位置。

2 个答案:

答案 0 :(得分:2)

my $nucleotide = substr $DNA, $po, 3;

这将从位置$po$po+2取3个核苷酸并将其分配给$nucleotide

答案 1 :(得分:1)

这将是这样的:

use strict;
use warnings;

print 'ENTER THE FILENAME OF THE DNA SEQUENCE:= ';
my $DNA_filename = <STDIN>;
chomp $DNA_filename;
unless (open(DNAFILE, $DNA_filename))
{
    die 'Cannot open file "' . $DNA_filename . '"' . "\n\n";
}

my @DNA = <DNAFILE>;
close DNAFILE;

my $DNA_string = join('', @DNA);
print "\n" . 'The original DNA file is:' . "\n" . $DNA_string . "\n";
$DNA_string =~ s/\s//g;

print ' enter the number ';
my $pos = <STDIN>;

if ($pos > length($DNA_string)) 
{
    print ' no data';
}
else
{
    print ' ' . substr($DNA_string, $pos, 3) . "\n\n";
}

一些意见:

  1. 始终use strictuse warnings - 它可以帮助您编写更好且无错误的代码。
  2. 我个人不喜欢在双引号字符串中使用插值,因此这些连接。
  3. 结果的位置从0开始 - 如果您愿意,您可以更改最后一个条件,否则。
  4. 编辑:我误读了关于核苷酸的部分问题,正如@hexcoder所写,你想要substr($DNA_string, $pos, 3)

相关问题