Bonjour,
Je rencontre un problème avec le script suivant: les valeurs s'accumulent sur la même clef au lieu de se repartir sur les trois différentes que j'essaie de créer.
Il semble qu'à la ligne 45 le code ne reconnait pas $code qui est pourtant créer plus tôt dans la boucle while.
Est- ce que quelqu'un est en mesure de m'aider?
Merci!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 #essai1 pour exercice 10 use warnings; use strict; use Data::Dumper; my $file = 'file.fas'; # attribuer à la variable file la premiere lifne du fichier open(IN, $file); # ouvrir le fichier my %seq = (); #declarer la variable hachage seq my $code; #declarer la variable code my @data = <IN>; #on declare la variable liste @data et on lui associe le ficher ouvert close IN; print 'deuxieme ligne:' , "$data[1]\n"; print 'derniere ligne:' , "$data[-1]\n"; my $vari = scalar @data; print 'nombre de lignes:' , "$vari\n"; my $var; #declarer la variable var while($var= shift @data)#on enleve le premier element de la liste data et on l'attribue à $var { if($var =~ />/) { chomp $var; #elimination du saut à la ligne $var=~ s/\>//g; #elimination du signe > my $code = $var; #association de l'indentifiant de la séquence à la variable code $seq{$code} = ''; # l'indentifiant code est la clé du hachage print 'code:' , "$code\n"; print 'hachage identifiants : '; print Dumper (\%seq); print "\n"; } else { chomp $var; #enlever le saut à la ligne de la ligne $var = uc $var; #mettre tous les caractères en majuscule $var =~ s/[^ATCG]/N/g; #substituer tout ce qui n'est pas ATCG par N $var =~ s///; #eliminer les espaces inutiles print 'var: ' , "$var\n"; my $val= $var; # need une ligne pour dire que si le code change #la valeur va au nouveau code $seq{$code} .= $val; #le point nous permet d'ajouter val à la fin de la valeur print 'hachage avant fin boucle : '; print Dumper (\%seq); print "\n"; } } # les problemes sont les suivants: # la valeur passe d'une clé à l'autre parce qu'à l45 il ne reconnait # pas $code print 'hachage : '; print Dumper (\%seq); print "\n"; close IN; exit;
Partager