0

所以我的问题是如何在 perl 中镜像基因序列?基本上我有一段看起来像这样的代码:

 m/(([ACGT]{4})\2)/

这匹配连续四个字母中的任何一个 4 次 *2 ......所以例如:CGAG CGAG(没有空格)。如何让这段代码打印出 CGAG,然后打印出 GAGC 而不是 CGAG(第二个的镜像?任何帮助将不胜感激。

4

3 回答 3

1

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;
于 2013-10-25T21:15:40.147 回答
0

使用reverse& split

$ perl -le 'print reverse split //, "GAGC"'
CGAG
于 2013-10-25T20:11:29.000 回答
0

如果我没记错的话,你想找到一个回文序列。.

在你的情况下,你可以做这样的事情。

#!/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
于 2013-10-25T23:34:19.373 回答