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 :
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 :
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 :
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 :
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 :
1 2 3 4 5 6 7
| sub doublePrint {
my $fh = shift;
print @_;
print $fh @_
}
doublePrint( $fh_txt, "..." ); |
--
Jedaï
Partager