Bonjour,
il faudrait que tu montres un exemple de ton fichier en entrée pour mieux comprendre ce que tu cherches à faire avec ton programme.
Cela dit, le problème est sans doute que tu déclares $code à l'intérieur de la boucle
while, ce qui fait qu'à une autre itération dans cette boucle, la valeur qui a été donnée à $code est perdue.
Il faudrait que tu déclares $code (avec une instruction de type "
my $code;")
avant d'entrer dans la boucle, et que enlèves le "
my" dans la ligne affectant une valeur à $code dans le
if.
Par exemple:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # ...
my $var; #declarer la variable var
my $code;
while($var= shift @data)#on enleve le premier element de la liste data et on l'attribue à $var
{
if($var =~ />/)
{
#...
$code = $var; #association de l'indentifiant de la séquence à la variable code
# ...
}
else
{
# ...
$seq{$code} .= $val; #le point nous permet d'ajouter val à la fin de la valeur
# ...
}
} |
J'ajouterais un commentaire n'ayant pas à voir avec ton problème. Cette ligne de code ouvrant un fichier:
1 2
|
open(IN, $file); # ouvrir le fichier |
utilise une syntaxe obsolète et critiquée (même si elle fonctionne encore). Les "bonnes pratiques" communément admises consistent à utiliser un
file handle lexical, employer une syntaxe à trois arguments et vérifier si l'appel système a réussi:
1 2
|
open my $IN, "<", $file or die "Ouverture impossible de $file $!"; |
Cela implique bien sûr de remplacer "IN" par "$IN" dans le reste du programme.
Partager