我有以下脚本在输入字符串(DNA序列)中搜索指定的子字符串。我想知道是否有人可以帮助指定特定字符的简并性。例如,我不是搜索GATC(或任何仅由G&#39,s&#39; s,A&#39;和C&#39;组成的),而是搜索GRTNA,其中R = A < b>或 G,其中N = A,G,C 或 T.我需要能够在脚本中的长列表中指定其中的一些。非常感谢任何帮助或提示!
use warnings;
use strict;
#User Input
my $usage = "Usage (OSX Terminal): perl <$0> <FASTA File> <Results Directory + Filename>\n";
#Reading formatted FASTA/FA files
sub read_fasta {
my ($in) = @_;
my $sequence = "";
while(<$in>) {
my $line = $_;
chomp($line);
if($line =~ /^>/){ next }
else { $sequence .= $line }
}
return(\$sequence);
}
#Scanning for restriction sites and length-output
open(my $in, "<", shift);
open(my $out, ">", shift);
my $DNA = read_fasta($in);
print "DNA is: \n $$DNA \n";
my $len = length($$DNA);
print "\n DNA Length is: $len \n";
my @pats=qw( GTTAAC );
for (@pats) {
my $m = () = $$DNA =~ /$_/gi;
print "\n Total DNA matches to $_ are: $m \n";
}
my $pat=join("|",@pats);
my @cutarr = split(/$pat/, $$DNA);
for (@cutarr) {
my $len = length($_);
print $out "$len \n";
}
close($out);
close($in);
答案 0 :(得分:0)
GRTNA
将对应于模式G[AG]T[AGCT]A
。
看起来你可以通过编写
来做到这一点for (@pats) {
s/R/[AG]/g;
s/N/[AGCT]/g;
}
前
my $pat = join '|', @pats;
my @cutarr = split /$pat/, $$DNA;
但我不确定我是否可以帮助您满足&#34;我需要能够在脚本中的长列表中指定其中的一些&#34; < / em>的。我认为最好将您的序列放在单独的文本文件中,而不是将列表直接嵌入到程序中。
顺便说一下,
更简单return $sequence
来自read_fasta
子程序?返回引用只意味着您必须使用$$DNA
在任何地方取消引用它。我建议看起来应该是这样的
sub read_fasta {
my ($fh) = @_;
my $sequence;
while (<$fh>) {
unless (/^>/) {
chomp;
$sequence .= $_;
}
}
return $sequence;
}