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
while (my @row = $sth0->fetchrow_array){
 
	my $ID = $row[0];
	my $ACC = $row[1];
	my $TAXON = $row[2];
 
	my @acc_list = split(/ /, $ACC);
 
	# clé = taxon : vérifié est bien unique
	my %taxon_hash;	
 
	# recherche du taxon correspondant à l'accession
	ACCESSIONS :
	foreach my $acc (@acc_list){ 
 
		my $gb_data = $gb->get_Seq_by_acc($acc);
 
		my @Features = $gb_data->get_SeqFeatures;
		my $FeaturesDNA = $Features[0];
 
		GB_DATA :
		foreach my $k (keys %$FeaturesDNA)
		{
 
			if ($k eq "annotation")
			{
					my $SousObjet1 = ($FeaturesDNA->{$k});
					my $SousObjet2 = ($SousObjet1->{"_annotation"});
 
 
					my $SousObjet4 = ($SousObjet2->{"db_xref"});
					my $taxon = ${$SousObjet4}[0];
					$taxon =~ s/\D//g;
 
					if (defined $taxon)
					{
						push (@{$taxon_hash{$taxon}}, $acc);
					}
					next ACCESSIONS;
 
			} #if
 
		} # foreach my $k (keys %$FeaturesDNA)
 
	}
 
	if (keys %taxon_hash > 1){
		# $taxon_hash{$taxon} = array d'accession => à garder en mémoire.
		print "erreur pour $ID\n"; 
	}
	else {
		my $single_key = join ('', keys %taxon_hash);
		my $sql = "UPDATE fungi2 SET taxon = $single_key WHERE id = $ID"; 
		print $sql."\n";
	}
 
 
}# fin du while
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
	if (keys %taxon_hash > 1){
		# $taxon_hash{$taxon} = array d'accession => à garder en mémoire.
		print "erreur pour $ID\n"; 
	}
	else {
		my $single_key = join ('', keys %taxon_hash);
		my $sql = "UPDATE fungi2 SET taxon = $single_key WHERE id = $ID"; 
		print $sql."\n";
	}
Si ma hash ne possède qu'une seule clé, est-il possible de la récupérer plus simplement que de cette façon?



J'aimerais garder en mémoire le contenu des hash qui n'ont pas fonctionné. Le problème est que ceux-ci sont dans une boucle while et donc écrasé à chaque passage. Je pense qu'il existe un module permettant de sauver des tables afin de les réutiliser ultérieurement. Avez-vous une idée sur la façon la plus simple de procéder? Devrais-je recréer un hash avant le while qui récupèrerait les valeurs des %taxon_hash contenant plus d'une clé et serait sauvegardé quelque part tout à la fin du script.



Merci pour votre aide.