J'aimerais que la séquence $seq_mut soit égale à $seq mais que $cod_mut soit remplacé par $blaTEMx
Où est mon erreur?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ($seq_mut = $seq ) =~ s/${cod_mut}/${blaTEMx}/;
Merci
J'aimerais que la séquence $seq_mut soit égale à $seq mais que $cod_mut soit remplacé par $blaTEMx
Où est mon erreur?
Code : Sélectionner tout - Visualiser dans une fenêtre à part ($seq_mut = $seq ) =~ s/${cod_mut}/${blaTEMx}/;
Merci
Faut faire au plus simple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 my $seq_mut = $seq; $seq_mut =~ s/$cod_mut/$blaTEMx/;![]()
- Les meilleurs cours et tutoriels Perl et Perl 6 pour vous former ;
- FAQ Perl, Perl 6 et Perl/Tk d'entraide ;
- Les news sur la rubrique Perl ;
- S'abonner au compte Twitter de la rubrique Perl ;
- Mes tutoriels developpez.com.
Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !
Merci de me répondre. C'est ce que j'ai essayé en premier lieu mais sans succès.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 # recherche du codon contenant la mutation my ($cod_mut) = $seq =~ /(\w*\[\w+\]\w*)/; # séquence mutée my $seq_mut; # si 1 seul nucléotide est muté if ($cod_mut =~ /\[\w\]/){ ($seq_mut = $seq ) =~ s/$cod_mut/$blaTEMx/; }$cod_mut = '[T]TT';
$blaTEMx = 'CTT';
sequence : ATG AGT ATT [T]TT CAT TTT CGT GTC
Et cela ne va pas non plus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 # recherche du codon contenant la mutation my ($cod_mut) = $seq =~ /(\w*\[\w+\]\w*)/; # séquence mutée my $seq_mut = $seq; # si 1 seul nucléotide est muté if ($cod_mut =~ /\[\w\]/){ $seq_mut =~ s/$cod_mut/$blaTEMx/; } print "$start_mut\t$cod_mut\t=>\t$blaTEMx\n$seq\n$seq_mut\n";
Il faut ajouter des slashes
Solution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 my $cod_mut = '\[T\]TT'; my $blaTEMx = 'CTT'; my $seq = 'ATG AGT ATT [T]TT CAT TTT CGT GTC'; my $seq_mut = $seq; $seq_mut =~ s/$cod_mut/$blaTEMx/; print "$seq_mut\n";
Il n'y avait pas un autre moyen que quotemeta?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 # si 1 seul nucléotide est muté if ($cod_mut =~ /\[\w\]/){ $cod_mut = quotemeta ($cod_mut); ($seq_mut = $seq ) =~ s/$cod_mut/$blaTEMx/; }
Je ne connais pas d'autre moyen que quotemeta, qui est justement fait pour cela. Ton écriture d'affectation en passant est par ailleurs tout à fait légale ( ($a = $b) =~ s/tralala/trululu/ ).
J'ai trouvé c'était qr auquel je pensais et que je n'arrivais plus à retrouver
Ne réglerait-il pas mon problème? N'est-ce pas plus propre?Alternately, you can use qr//, the regular expression quote operator (see perlop for more details). It quotes and perhaps compiles the pattern, and you can apply regular expression flags to the pattern.
Partager