1
#!/usr/bin/perl -w
use strict;

my $string = $ARGV[0];

my @caracteresSeparados = split(//,$string);

my $temp;
my @complementoADN;

foreach my $i(@caracteresSeparados){

    if($i eq 'a'){
        $temp = 't';
        push(@complementoADN,$temp);
    }elsif($i eq 'c'){
       $temp = 'g';
       push(@complementoADN,$temp);
    }elsif($i eq 'g'){
       $temp = 'c';
       push(@complementoADN,$temp);
    }elsif($i eq 't'){
       $temp = 'a';
       push(@complementoADN,$temp);
    }
}

printf("@complementoADN\n");

我有这个代码,它通过参数接收一个带有 A、C、G、T 字母的字符串。

我使用这个脚本的目标是接收用户可以在上面写这些字母的字符串,然后应该在控制台中打印替换的相同字母,我的意思是

  • A 替换为 T
  • C 替换为 G
  • G 替换为 C
  • T 替换为 A

我不限制用户介绍其他字母,但现在没问题......

一个例子:

用户介绍参数:ACAACAATGT

程序应打印:TGTTGTTACA

我的脚本做得对。

我的问题是,我可以用哈希列表来做吗?如果是的话,你能告诉我那个哈希工作的脚本吗?非常感谢 :)

4

2 回答 2

6

它不涉及哈希,但如果您希望简化程序,请查找( tr//"transliteration") 运算符。我相信以下内容与您的相同:

#!/usr/bin/perl -w
use strict;

my $string = $ARGV[0];

my $complementoADN = $string;
$complementoADN =~ tr/ACGT/TGCA/;

print $complementoADN, "\n";
于 2013-06-10T00:45:56.940 回答
2

IMSoP 的回答是正确的——在这种情况下,tr是最适合这项工作的工具。

但是,是的,它也可以用哈希来完成:

#!/usr/bin/env perl    

use strict;
use warnings;
use 5.010;

my $original = 'ACAACAATGT';
my $replaced;

my %flip = (
  A => 'T',
  C => 'G',
  G => 'C',
  T => 'A',
);

for (split '', $original) {
  $replaced .= $flip{$_};
} 

say $replaced;

输出:

TGTTGTTACA
于 2013-06-10T09:07:29.550 回答