Bonjour,

j'ai un problème que je trouve très bizarre : une boucle foreach qui se bloque toujours au même endroit.

voici le code :
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
 
sub Recup_concepts_TFBS
{
	my (%concept_infos) = @_;
 
	my ($res2, $tagID, $TF);	
	my (%concept_TF_TFBS) = ();
 
	&Connexion_BD();
 
	open(RES, ">../resultats/infos_concepts_TFBS.txt") or die("Impossible d'ouvrir infos_concepts_TFBS.txt");
	print(RES "biset_id \t|\t TF \t|\t tag_id \t|\t nb de gene ayant le TFBS \n");
 
	foreach my $biset_id (keys(%concept_infos))
	{
		foreach my $tag (@{$concept_infos{$biset_id}})
		{
			$tagID = $tag->{"tagID"};
 			$TF = $tag->{"TF"};
 
 			my $req2 = "SELECT t.".$table."virtualtag_id, TF.gene_product 
				FROM ".$table."_TFBS t 
				INNER JOIN ".$table."_virtual_observed_tag v 
				ON t.".$table."virtualtag_id = v.".$table."virtualtag_id 
				INNER JOIN biset_cont_tag b 
				ON b.tagID = v.".$table."observedtag_id 
				INNER JOIN ".$table."_transcription_factor TF 
				ON TF.tf_id = t.tf_id 
				WHERE bisetID = $biset_id
				AND b.tagID != $tagID
				AND TF.gene_product = '$TF';";
 
 
			#prépare la requête sql
			$res2 = $dbconnect_loc -> prepare($req2);
 
			#exécution de la requête sql
			$res2 -> execute() || die("pb de selection : $DBI::errstr");
 
 
			my $rows = $res2 -> rows; #compte le nb de lignes renvoyées par la requete
 
			$concept_TF_TFBS{$biset_id} -> {$tagID}  = $rows;
			print(RES "$biset_id \t\t|\t $TF \t\t|\t $tagID \t|\t $rows\n");
 
		}
	}
	close(RES);
 
	#spécifie la fin de la requête
	$res2 -> finish();
 
	#deconnexion de la base
	$dbconnect_loc ->disconnect();
 
	return %concept_TF_TFBS;
}
cela dit, je pense que ça vienne du foreach : si j'enlève tout le code de la boucle interne pour mettre un print à la place, j'obtiens bien toutes les lignes attendue... Donc j'imagine que c'est lié à la requête, mais j'ai fait plusieurs tests : la requête marche bien si je la passe directement sous MySQL.

Bref, je sais pas du tout où chercher, donc la moindre piste serait la bienvenue.

EDIT : je peux dire que ça bloque toujours au même endroit car le fichier dans lequel j'imprime les résultats se termine toujours ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
308655 		|	 HNF4A 		|	 611040 	|	 1
157343 		|	 HOXA7 		|	 41409 	|	 3
288633 		|	 DBT 		|	 401805 	|	 0
248771 		|	 CUX1 		|	 662974 	|	 0
165342 		|	 E2F1 		|	 772883 	|	 0
226486 		|	 SMAD4 		|	 737465 	|	 3
60582 		|	 PEBP1 		|	 552873 	|	 0
216759 		|	 DBT 		|	 401805 	|	 0
20470 		|	 DBT 		|	 401805 	|	 3
107302
ce qui est déjà bizarre en soit car la ligne n'est pas imprimé entièrement...