从文件读取而不是从STDIN读取需要更改什么?

时间:2011-03-01 11:15:47

标签: perl bioinformatics

编写该程序以获取核苷酸序列并将其翻译成蛋白质序列。但该程序必须从文件中获取所有核苷酸序列并转化为蛋白质序列。包含核苷酸序列的文件如下所示:

TAGAGATAGATTAGATAG
CTGATAGATAGTAAGATGATAGTA
GATAGTAGATAGTAG

程序在一行中输入。该程序应该读取由多行序列组成的文件,例如有多个序列,所有序列都在一个文件中以>开头。问题是程序将输入一行。

以下是该计划:

%pro = (
    'ATT' => 'I',
    'ATC' => 'I',
    'ATA' => 'I',
    'CTT' => 'L',
    'CTC' => 'L',
    'CTA' => 'L',
    'CTG' => 'L',
    'TTA' => 'L',
    'TTG' => 'L',
    'GTT' => 'V',
    'GTC' => 'V',
    'GTA' => 'V',
    'GTG' => 'V',
    'TTT' => 'F',
    'TTC' => 'F',
    'ATG' => 'M',
    'TGT' => 'C',
    'TGC' => 'C',
    'GCT' => 'A',
    'GCC' => 'A',
    'GCA' => 'A',
    'GCG' => 'A',
    'GGT' => 'G',
    'GGC' => 'G',
    'GGA' => 'G',
    'GGG' => 'G',
    'CCT' => 'P',
    'CCC' => 'P',
    'CCA' => 'P',
    'CCG' => 'P',
    'ACT' => 'T',
    'ACC' => 'T',
    'ACA' => 'T',
    'ACG' => 'T',
    'TCT' => 'S',
    'TCC' => 'S',
    'TCA' => 'S',
    'TCG' => 'S',
    'AGT' => 'S',
    'AGC' => 'S',
    'TAT' => 'Y',
    'TAC' => 'Y',
    'TGG' => 'W',
    'CAA' => 'Q',
    'CAG' => 'Q',
    'AAT' => 'N',
    'AAC' => 'N',
    'CAT' => 'H',
    'CAC' => 'H',
    'GAA' => 'E',
    'GAG' => 'E',
    'GAT' => 'D',
    'GAC' => 'D',
    'AAA' => 'K',
    'AAG' => 'K',
    'CGT' => 'R',
    'CGC' => 'R',
    'CGA' => 'R',
    'CGG' => 'R',
    'AGA' => 'R',
    'AGG' => 'R',
    'TAA' => '*',
    'TAG' => '*',
    'TGA' => '*'
);

print "Enter the mRNA Sequence\n";
$seq = <>;
chomp($seq);
$p = '';
$ln = length($seq);
$j = $ln / 3;
for ($i = 0, $k = 0; $i < $ln, $k < $j; $k++) {
    $fra[$k] = substr($seq, $i, 3);
    $i = $i + 3;
}
for ($k = 0; $k < $j; $k++) {
    if (exists($pro{$fra[$k]})) {
        $p = $p . $pro{$fra[$k]};
    } else {
        $p = $p . x;
    }
}
print "$p";

1 个答案:

答案 0 :(得分:0)

open $fh, "r", "myFileName";
while ($seq = <fh>) {
    chomp($seq);
    $p = '';
    $ln = length($seq);
    $j = $ln / 3;
    for ($i = 0, $k = 0; $i < $ln, $k < $j; $k++) {
        $fra[$k] = substr($seq, $i, 3);
        $i = $i + 3;
    }
    for ($k = 0; $k < $j; $k++) {
        if (exists($pro{$fra[$k]})) {
            $p = $p . $pro{$fra[$k]};
        } else {
            $p = $p . x;
        }
    }
    print "$p";
}