Salut et merci de prendre la peine de lire tout ce qui suit, c'est un peu long mais très simple.
A la base je voulais créer une version récursive de la fonction glob, pour pouvoir lister des sous-dossiers.

Voici donc le contexte exact de ma tentative infructueuse de codage récursif :

- Premièrement, j'ai crée un dossier pour mes tests : "c:/test".
Dans ce dossier, il y a 3 fichiers texte et 2 sous-dossiers "A" et "B"
contenant à leur tour resp. deux et un fichiers texte.
Voici donc le contenu de "c:/test" (2 dossiers, 6 fichiers) :

- c:/test/A/a_01.txt
- c:/test/A/a_02.txt
- c:/test/B/b_01.txt
- c:/test/x_03.txt
- c:/test/x_01.txt
- c:/test/x_02.txt

Et voici le code de la fonction glob_s dont l'unique paramètre contient
le nom du dossier dont il faut lister le contenu.
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
$count = 0;
print glob_s("c:/test");
sub glob_s {
	#Sans la ligne ci-dessous, il y aurait une boucle infinie !
	if($count++ > 100){return "";}
	
	my($path) = $_[0];
	my($ret_list) = "\nglob_s CALL #".$count." path = \"".$path."\"\n";	
 	while(glob($path)){
	 	my($file) = $_;
	 	if(-f $file){
		 	$ret_list .= "#".$count."{".$path."}"." found file \"".$file."\"\n";}
	 	elsif(-d $file){
		 	$ret_list .= "#".$count."{".$path."}"." found dir \"".$file."\"...\n".glob_s($file."/*");}
 	}
	return $ret_list;
}#glob_s
Et voici le résultat de l'exécution (tronqué, mais l'essentiel tient en quatre lignes) :

glob_s CALL #1 path = "c:/test"
#1{c:/test} found dir "c:/test"...

glob_s CALL #2 path = "c:/test/*"
#2{c:/test} found dir "c:/test"...

... etc ... (jusqu'à #101)

Il y a un problème flagrant lors du 2ème appel (#2) de glob_s avec la valeur de la variable $path
qui fait que le texte en vert ne correspond pas au texte en rouge, d'où la boucle infinie.

Pourquoi diable $path ne garde pas la même valeur à l'intérieur se glob_s ???