【发布时间】:2023-03-13 20:38:01
【问题描述】:
我有这样的代码:
#!/usr/bin/perl
use strict;
use warnings;
my %proteins = qw/
UUU F UUC F UUA L UUG L UCU S UCC S UCA S UCG S UAU Y UAC Y UGU C UGC C UGG W
CUU L CUC L CUA L CUG L CCU P CCC P CCA P CCG P CAU H CAC H CAA Q CAG Q CGU R CGC R CGA R CGG R
AUU I AUC I AUA I AUG M ACU T ACC T ACA T ACG T AAU N AAC N AAA K AAG K AGU S AGC S AGA R AGG R
GUU V GUC V GUA V GUG V GCU A GCC A GCA A GCG A GAU D GAC D GAA E GAG E GGU G GGC G GGA G GGG G
/;
open(INPUT,"<dna.txt");
while (<INPUT>) {
tr/[a,c,g,t]/[A,C,G,T]/;
y/GCTA/CGAU/;
foreach my $protein (/(...)/g) {
if (defined $proteins{$protein}) {
print $proteins{$protein};
}
}
}
close(INPUT);
此代码与我的另一个问题的答案有关:DNA to RNA and Getting Proteins with Perl
程序的输出是:
SIMQNISGREAT
如何用 Perl 重写该代码,它将在命令行上运行,并且可以用更少的代码重写(如果可能的话,一行代码)?
PS 1: dna.txt 是这样的:
TCATAATACGTTTTGTATTCGCCAGCGCTTCGGTGT
PS 2:如果代码行少,可以将my %proteins变量写入文件。
【问题讨论】:
-
不要。可读性很好。
-
虽然 Perl 肯定有许多有趣的单行代码,但它们并不总是比更长、更冗长的代码更好。您有什么具体的想要改进的吗?
-
与家庭作业无关,因为代码足以完成家庭作业。只是我想了解如何用更少的行代码改进该代码,因为我对单行编码感兴趣。
-
另外值得注意的是,在字符类中使用逗号是不必要的,好像我没有弄错你只是在制作相应的逗号逗号。相反,您可能希望使用 [acgt] 和 [ACGT],尽管我相信 TR 的参数充当一种字符类。