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;