yukke::note

technical note

Perlで相補鎖を返す関数を短く書く

DNAは、相補的塩基対形成という性質があって、AとG、TとCとしか水素結合を形成することは出来ない。つまり、ATCCという塩基の相方の塩基は必ずTCGGとなる。これを出来るだけ短く書きたい。 がんばったら、 で5行で、実質の処理をしているのは1行になる。うーん、ループ使わずに一行にしたいがどうやればよいものか。

$rev .= $_ =~ /[aA]/ ? 't' : $_ =~ /[cC]/ ? 'g' : $_ =~ /[gG]/ ? 'a' : $_ =~ /[tT]/ ? 'c' : '' for split //, my $s = shift;

で、というか、splitの2個目の引数で変数定義しつつ渡せるのか。

my $s = $str =~ tr/AaTtGgCc/TtAaCcGg/r;

でよくねーか......なんで気付かなかったんだろ。。。