Bonjour j'ai un soucis avec une boucle For

Mon soucis est que je possede plusieurs fichiers representant chaque semaine de l'annee dans lequel j’essai de faire un tri.

fich1 contenant
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,20 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,1 10,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,10 2,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1

fich2 contenant
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,20 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,1 10,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,10 2,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2

fich3 contenant
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,20 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,1 10,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,10 2,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
sub TRI {
open F1,"$llgg1/fich1.txt" or die "E/S: $!\n";
open R1,">$llgg1/semaine_1.txt" or die "E/S: $!\n";		#Fichier FINAL
    while ($l = <F1>) {
        @CC = split(/\n/,$l);
 
        #push @TdT, [ @CC ];
        push @TdT,  [@CC];
           }    
@tri = sort {$a->[2] cmp $b->[2]} @TdT;	# tri selon le champ 2
print R1 "@$_\n" for @tri;
close (F1);close (R1);
}
Jusque la tous ce passe bien et j'obtient le fichier semaine_1.txt trier dans l'ordre croissant pour la semaine 1
Pour me faciliter la tache je mets une boucle For a ma fonction qui grace au scalaire $o me permait de traiter chaque semaine.

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
 
for($o = 1; $o <= 4; $o++) {
&TRI();
}
 
sub TRI {
open F1,"$llgg1/fich$o.txt" or die "E/S: $!\n";
open R1,">$llgg1/semaine_$o.txt" or die "E/S: $!\n";		#Fichier FINAL
    while ($l = <F1>) {
        @CC = split(/\n/,$l);
 
        #push @TdT, [ @CC ];
        push @TdT,  [@CC];
           }    
@tri = sort {$a->[2] cmp $b->[2]} @TdT;	# tri selon le champ 2
print R1 "@$_\n" for @tri;
close (F1);close (R1);
}
C'est la que je ne comprends plus rien le 1er sort bien mais les autres c’est la cata…
$llgg1/semaine_$1.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1

mais les fichiers suivant :
$llgg1/semaine_$2.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1

$llgg1/semaine_$3.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1

df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1


Alors que le resultat attendu serait
$llgg1/semaine_$1.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 1

$llgg1/semaine_$2.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 2

$llgg1/semaine_$3.txt
df,x,9 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3
df,x,30 16,1000 ,dqsldq,,,,jdhdj,hgdhd,semaine 3

Pouvez vous m’aider je ne vois pas comment utiliser la boucle correctement