Ищет помощь по поиску и устранению неисправностей. Это домашнее задание. Мой профессор рекомендует использовать форумы. У меня нет опыта работы с функциями Perl или Subs, поэтому, пожалуйста, ограничьте ответы на соответствующий уровень, чтобы я мог понять.Редактирование справки с использованием скрипта perl для запуска и остановки в определенных местах в массиве
Цель сценария - прочитать строку ДНК (или файл из командной строки, которую я добавлю позже), перевести ее в РНК, а затем вернуть значение белка в виде прописной однобуквенной буквы аминокислотные названия.
Функция сценария:
Берут 3 символов «кодоны» от первого символа и придать им единый письмо Symbol (прописную однобуквенное название аминокислоты из хеш-таблицы)
Распечатать РНК-белки, которые начинаются с AUG («M») и заканчиваются UAG, UAA или UGA.
Если возникает разрыв, начинается новая линия и процесс повторяется. Мы можем предположить, что пробелы кратные тройкам.
Основные проблемы, насколько я могу сказать:
Я не знаю, где есть цикл данных с помощью хэш-таблицы. Я попытался разместить его до и после моего блока Foreach. Я также взял блок Foreach вообще и попробовал Пока & If.
Блок Foreach, кажется, не обрабатывает весь массив @all_codons и останавливается только на AUG.
Очевидная и самая большая проблема заключается в том, что она ничего не возвращает. Где-то по пути значение $ 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";
}
}
Вы просто подставив свой '$ dna_string =«CCCCA ... '' с $ dna_string = <> '? Путь ваша программа написана, вы будете необходимо прочитать весь файл в памяти, который может не работать, в зависимости от его размера. В любом случае, вы бы хотели сделать «my $ dna_string = join», map {chomp} <> '. –
Я понял, что это новый строки в файле, который создавал проблему. Скрипт отлично работает.Спасибо, что на прошлой неделе я так много учил меня этому и моему другому вопросу. – Koala