2010-11-09 8 views
3

Ищет помощь по поиску и устранению неисправностей. Это домашнее задание. Мой профессор рекомендует использовать форумы. У меня нет опыта работы с функциями Perl или Subs, поэтому, пожалуйста, ограничьте ответы на соответствующий уровень, чтобы я мог понять.Редактирование справки с использованием скрипта perl для запуска и остановки в определенных местах в массиве

Цель сценария - прочитать строку ДНК (или файл из командной строки, которую я добавлю позже), перевести ее в РНК, а затем вернуть значение белка в виде прописной однобуквенной буквы аминокислотные названия.

Функция сценария:

  1. Берут 3 символов «кодоны» от первого символа и придать им единый письмо Symbol (прописную однобуквенное название аминокислоты из хеш-таблицы)

  2. Распечатать РНК-белки, которые начинаются с AUG («M») и заканчиваются UAG, UAA или UGA.

  3. Если возникает разрыв, начинается новая линия и процесс повторяется. Мы можем предположить, что пробелы кратные тройкам.

Основные проблемы, насколько я могу сказать:

  1. Я не знаю, где есть цикл данных с помощью хэш-таблицы. Я попытался разместить его до и после моего блока Foreach. Я также взял блок Foreach вообще и попробовал Пока & If.

  2. Блок Foreach, кажется, не обрабатывает весь массив @all_codons и останавливается только на AUG.

  3. Очевидная и самая большая проблема заключается в том, что она ничего не возвращает. Где-то по пути значение $ next_codon присваивается «false». Я пробовал комментировать каждую строку по частям - последняя строка, которая вернула что-то, это My $ start, а оттуда все это ложно.

The Script:

$^W = 1; 
use strict; 


my $dna_string = "CCCCAAATGCTGGGATTACAGGCGTGAGCCACCACGCCCGGCCACTTGGCATGAATTTAATTCCCGCCATAAACCTGTGAGATAGGTAATTCTGTTATATCCACTTTACAAATGAAGAGACTGAGGCAAAGAAAGATGATGTAACTTACGCAAAGC"; 

my %codon_codes = (
    "UUU" => "f", "UUC" => "f", "UUA" => "l", "UUG" => "l", 
    "CUU" => "l", "CUC" => "l", "CUA" => "l", "CUG" => "l", 
    "AUU" => "i", "AUC" => "i", "AUA" => "i", "AUG" => "m", 
    "GUU" => "v", "GUC" => "v", "GUA" => "v", "GUG" => "v", 
    "UCU" => "s", "UCC" => "s", "UCA" => "s", "UCG" => "s", 
    "CCU" => "p", "CCC" => "p", "CCA" => "p", "CCG" => "p", 
    "ACU" => "t", "ACC" => "t", "ACA" => "t", "ACG" => "t", 
    "GCU" => "a", "GCC" => "a", "GCA" => "a", "GCG" => "a", 
    "UAU" => "y", "UAC" => "y", "UAA" => " ", "UAG" => " ", 
    "CAU" => "h", "CAC" => "h", "CAA" => "q", "CAG" => "q", 
    "AAU" => "n", "AAC" => "n", "AAA" => "k", "AAG" => "k" 
); 

my $rna_string = $dna_string; 
$rna_string =~ tr/[tT]/U/; 

my @all_codons = ($rna_string =~ m/.../g); 

foreach my $next_codon(@all_codons){ 

    while ($next_codon =~ /AUG/gi){ 

     my $start = pos ($next_codon) -3; 

     last unless $next_codon =~ /U(AA|GA|AG)/gi; 

     my $stop = pos($next_codon); 

     my $genelen = $stop - $start; 

     my $gene = substr ($next_codon, $start, $genelen); 

     print "\n" . join($start+1, $stop, $gene,) . "\n"; 
    } 
} 

ответ

3

Я не понимаю 'цикл данных через хэш-таблицы' часть.

Мне кажется, что для каждого кодона вам нужно проверить, является ли он стартовым кодоном, стоп-кодоном, щелью или аминокислотой. И вам нужно каким-то образом сохранить состояние (ниже $in_gene).

my $in_gene = 0; 

foreach my $next_codon(@all_codons){ 
    if ($next_codon eq 'AUG') { 
     $in_gene = 1; 
    } 
    elsif ($next_codon =~ m/U(AA|GA|AG)/) { 
     $in_gene = 0; 
    } 
    elsif ($in_gene == 1) { 
     my $aminoacid = $codon_codes{$next_codon}; 
     print "\n" and next unless defined $aminoacid; 
     print $aminoacid; 
    } 
} 

Печатается

l 
lqak 
l 
q 
k 
+1

Вы просто подставив свой '$ dna_string =«CCCCA ... '' с $ dna_string = <> '? Путь ваша программа написана, вы будете необходимо прочитать весь файл в памяти, который может не работать, в зависимости от его размера. В любом случае, вы бы хотели сделать «my $ dna_string = join», map {chomp} <> '. –

+0

Я понял, что это новый строки в файле, который создавал проблему. Скрипт отлично работает.Спасибо, что на прошлой неделе я так много учил меня этому и моему другому вопросу. – Koala