J'ai deux casCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 my %rx_orga_query = ( 'Banthracis_Bcereus_Bthuringiensis' => '$orga_sbjct =~ /(?:B\.|Bacillus)\s+(?:anthracis|cereus|thuringiensis|sp\.)/i', 'Bacillus' => '$orga_sbjct =~ /(?:B\.|Bacillus)\s+(?:anthracis|cereus|thuringiensis|sp\.)/i', 'Aeromonas_caviae_hydrophila' => '$orga_sbjct =~ /(?:A\.|Aeromonas)\s+(?:caviae|hydrophila|sp\.)/i ', 'Mycobacterium_tuberculosis_paratub' => '$orga_sbjct =~ /(?:M\.|Mycobacterium)\s+(?:tuberculosis|paratub|sp\.)/i ', 'Streptocoques_pne_mit_ora_vir' => '$orga_sbjct =~ /(?:S\.|Streptococcus)\s+(?:pneumoniae|mitis|oralis|viridans|sp\.)/i ', ); ... if ($orga_query =~ /^([a-z]+)_([a-z]+)$/i){ my ($genus, $species) = ($1, $2); if(($orga_sbjct =~ /$genus\s*$species/i) || ($orga_sbjct =~ /$genus\s+sp\./i)){ $alignment = q{}; next; } } elsif ($rx_orga_query{$orga_query}){ if ($rx_orga_query{$orga_query}){ $alignment = q{}; next; } } else{ die "ERREUR POUR $orga_query"; }
1) $orga_query est composé de deux mots séparés par un underscore genus_species
2) $orga_query est composé de 1 ou plus de 2 mots.
Dans le premier cas, j'écris une expression régulière en fonction du genre et de l'espèce.
Dans le second cas, j'ai une expression régulière spécifique, placée dans %rx_orga_query. J'aimerais utiliser cette expression régulière (valeur du hash) en fonction de sa clé ($orga_query).
J'aimerais également savoir si il est possible d'inclure le premier if ($orga_query =~ /^([a-z]+)_([a-z]+)$/i) dans le hash? Ce qui revient donc à utiliser $1 et $2 (genre et espèce de la clé $orga_query) dans l'expression régulière (valeur correspondante dans %rx_orga_query).
Ce que je cherche à faire revient à faire une cascade de elsif
N'hésitez pas à me poser des questions si ce problème n'est pas clair.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 if ($orga_query =~ /^([a-z]+)_([a-z]+)$/i){ my ($genus, $species) = ($1, $2); if(($orga_sbjct =~ /$genus\s*$species/i) || ($orga_sbjct =~ /$genus\s+sp\./i)){ $alignment = q{}; next; } } elsif (($orga_query eq 'Bacillus') || ( $orga_query eq 'Banthracis_Bcereus_Bthuringiensis')){ if ($orga_sbjct =~ /(?:B\.|Bacillus)\s+(?:anthracis|cereus|thuringiensis|sp\.)/i){ $alignment = q{}; next; } } elsif ($orga_query eq 'Aeromonas_caviae_hydrophila'){ if ($orga_sbjct =~ /(?:A\.|Aeromonas)\s+(?:caviae|hydrophila|sp\.)/i){ $alignment = q{}; next; } } elsif ($orga_query eq 'Mycobacterium_tuberculosis_paratub'){ if ($orga_sbjct =~ /(?:M\.|Mycobacterium)\s+(?:tuberculosis|paratub|sp\.)/i){ $alignment = q{}; next; } } elsif ($orga_query eq 'Streptocoques_pne_mit_ora_vir'){ if ($orga_sbjct =~ /(?:S\.|Streptococcus)\s+(?:pneumoniae|mitis|oralis|viridans|sp\.)/i){ $alignment = q{}; next; } } else{ die "ERROR with$orga_query"; }
Merci pour votre aide,