所以我的问题是如何在 perl 中镜像基因序列?基本上我有一段看起来像这样的代码:
m/(([ACGT]{4})\2)/
这匹配连续四个字母中的任何一个 4 次 *2 ......所以例如:CGAG CGAG(没有空格)。如何让这段代码打印出 CGAG,然后打印出 GAGC 而不是 CGAG(第二个的镜像?任何帮助将不胜感激。
pff,真正的正则表达式方式是:
m/(([ACGT]{4})\s*(??{ my $b = reverse $2; $b }))/
perl -E 'warn "CGAG GAGC" =~ m/(([ACGT]{4})\s*(??{ my $b = reverse $2; $b }))/'
CGAG GAGCCGAG at -e line 1.
但它是一个实验性功能......
你可以做某事
my $str = "CGAGGAGC";
index($str, $1 . reverse($1)) != -1 && print "$1" . reverse($1) . " at " . (pos($str) - 4) while $str =~ m/([ACGT]{4})/g;
使用reverse
& split
:
$ perl -le 'print reverse split //, "GAGC"'
CGAG
如果我没记错的话,你想找到一个回文序列。.
在你的情况下,你可以做这样的事情。
#!/usr/bin/perl
use warnings;
use strict;
use 5.014;
my $dna = "TGCACGAGGAGCTTAC";
my ($match) = $dna =~ m/(([ACGT])([ACGT])([ACGT])([ACGT])\5\4\3\2)/;
say $match
#CGAGGAGC