Le script suivant sert à trouver un motif dans une séquence protéique.Comment puis-je trouver plusieurs motifs (sous-chaîne) dans une séquence de protéines (chaîne)?
use strict;
use warnings;
my @file_data=();
my $protein_seq='';
my $h= '[VLIM]';
my $s= '[AG]';
my $x= '[ARNDCEQGHILKMFPSTWYV]';
my $regexp = "($h){4}D($x){4}D"; #motif to be searched is hhhhDxxxxD
my @locations=();
@file_data= get_file_data("seq.txt");
$protein_seq= extract_sequence(@file_data);
#searching for a motif hhhhDxxxxD in each protein sequence in the give file
foreach my $line(@file_data){
if ($motif=~ /$regexp/){
print "found motif \n\n";
} else {
print "not found \n\n";
}
}
#recording the location/position of motif to be outputed
@locations= match_position($regexp,$seq);
if (@locations){
print "Searching for motifs $regexp \n";
print "Catalytic site is at location:\n";
} else {
print "motif not found \n\n";
}
exit;
sub get_file_data{
my ($filename)[email protected]_;
use strict;
use warnings;
my $sequence='';
foreach my $line(@fasta_file_data){
if ($line=~ /^\s*(#.*)?|^>/{
next;
}
else {
$sequence.=$line;
}
}
$sequence=~ s/\s//g;
return $sequence;
}
sub(match_positions) {
my ($regexp, $sequence)[email protected]_;
use strict;
my @position=();
while ($sequence=~ /$regexp/ig){
push (@position, $-[0]);
}
return @position;
}
Je ne sais pas comment étendre ce pour trouver des motifs multiples (dans un ordre fixe i.e. motif1, motif2, motif3) dans un fichier donné contenant une séquence protéique.
Votre code semble avoir quelques problèmes. En ligne 19, vous déclarez $ line, mais il n'est jamais utilisé. Dans la ligne 20, $ motif est toujours '', puisque cela n'a jamais changé depuis sa déclaration. Dans la ligne 43, vous enchaînez des elsifs, mais ce que vous semblez vraiment vouloir, c'est 'if ($ line = ~/^ \ s * $/ou $ line = ~/^ \ s * #/ou $ line = ~/^ > /) {next; } else {$ sequence. = $ line; }; ', ou mieux:' if ($ line = ~/^\s*(#.*)?|*>/) {next; } else {$ sequence. = $ line; }; '. Je ne sais pas ce que les parenthèses sont censées faire dans 'sub (match_positions) ...'. – Svante