Citation Envoyé par Jedai Voir le message
Ton problème est que le premier parcours se fait alphabétiquement selon le nom des répertoires (parce que j'ai fait un "sort keys %dirs") et values() renvoie les valeurs d'un hash dans l'ordre interne du hash, qui est arbitraire (et éventuellement même aléatoire selon ta version de Perl).

Pour corriger ceci, récupère les valeurs du hash dans le même ordre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
my @nom_des_repertoires = sort (keys %dirs);
my @nb_fichier_par_repertoire = @dirs{ @nom_des_repertoires };
(et arrête de déclarer et d'initialiser tes variables sur deux lignes, c'est une très mauvaise pratique et un accident en puissance, en plus d'être verbeux)
ou si tu utilises plutôt (comme je te le recommanderais) la version qui crée un %dirs qui contient des listes de noms de fichiers, tu peux utiliser :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
my @nom_des_repertoires = sort (keys %dirs);
my @nb_fichier_par_repertoire = map { scalar @{$_} } @dirs{ @nom_des_repertoires };
Par ailleurs j'espère que dans ton programme réel tu ne fais pas plusieurs parcours de tes répertoires ? Celui qui crée %dirs avec les listes de fichiers suffit pour tout, par exemple si tu veux le nombre total de fichier, il suffit de faire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
use List::Util qw(sum);
# ...
my $nb_fichier = sum (map { scalar @{$_} } values %dirs);

Par ailleurs tu n'arrêtes pas d'écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
print "...";	
print $fh_txt "...";
C'est une répétition disgracieuse et tu risques d'oublier de modifier les deux chaînes une fois, crée juste une sous routine :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
sub doublePrint {
    my $fh = shift;
    print @_;
    print $fh @_
}
 
doublePrint( $fh_txt, "..." );
--
Jedaï

Merci Jedai tu as résolu mon problème.

Par ailleurs, je suis entrain de changer mon programme avec les indications que tu m'a donné pour que ça ressemble plus à un programme de professionnel que d'amateur