Bonjour,

Je me doute bien qu'il existe un tas de modules permettant de parcourir récursivement un répertoire, mais à titre personnel, je me demandais quelle genre de méthode l'on pouvait utilisée pour y arriver.

J'avais personnellement pensé à utiliser un tableau associatif, une boucle while(), à chaque fois qu'un répertoire est trouvé, on lance une autre fonction qui liste le contenu du répertoire et l'ajoute au tableau associatif.

En gros rapidement, j'ai codé ceci : (je débute complétement en perl, et j'apprécierai donc toutes critiques constructives concernant ce bout de 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
 
#!/usr/bin/perl
 
use warnings;
use strict;
sub recursermdir($);
sub listdir($$);
 
my %content = ();
 
print "Entrez le nom du répertoire à parcourir : ";
while (<STDIN>) {
	chomp;
	if (!(-d) ) {            #je me sens plus à l'aise ainsi, y'a t'il une véritable utilité à une utiliser unless ?
		print "Il ne s'agit pas d'un répertoire.\n";
		last;
	}
	else {
		if (/.*[^\/]$/) {
			#$_ .= "/"; # On rajoute un / à la fin
		}
		recursedir($_);
	}
	print "Entrez le nom du répertoire à parcourir : "; #pour la boucle
}
 
sub recursedir($) {
	my $dir = $_;
	my ($key,$value,$total,$totaldir);
	listdir(\$dir, \%content);
	while (($key,$value) = each(%content)) {
		$total++;
		if (-d $key) {
			$totaldir++;
			listdir(\$key,\%content); #il s'agit d'un rép alors on le liste
		}
	}
	print "Il y a ".($total - $totaldir)." fichiers & ".($totaldir)." répertoires, pour un total de $total\n";
}
 
sub listdir($$) {
	my ($dir, $cont) = @_;
	if ($$dir =~ /.*[^\/]$/ and -d $$dir) {
		$$dir .= "/"; # on ajoute un / au cas où..
	}
	while (<$$dir*>) {
		if (-d) {
			$$cont{$_} = 'dir';
		}
		else {
			$$cont{$_} = 'file';
		}
	}
	return %$cont;
}
ps: désolé, je viens de me rendre compte que je n'avais pas posté dans le bon forum, mille excuses.