j'aimerais bien que tu m'expliques un peu le code histoire de pas l'utiliser sans savoir ce qui se passe derrière ...
Oui, bien sûr.
my %index; déclare un tableau associatif, c'est à dire une liste non-ordonnée de couples clé-valeur.
Ensuite comme tu l'as compris, on ouvre le premier fichier en lecture et on lit ligne à ligne. Pour chaque ligne lu (dans $_), on crée une entrée dans notre tableau avec pour clé la dite ligne et pour valeur 1, c'est le $index{$_} = 1;
On ouvre le second fichier et pour chaque ligne lue, on met l'entrée correspondante dans le tableau à 0, c'est à dire que les lignes déjà lus dans le premier fichier vont se retrouver marquées 0 dans le tableau. En fin de compte n'auront un 1 comme valeur que les clés qui correspondent à des lignes lus dans file1 et absentes de file2.
Il ne reste plus qu'à écrire les clés du tableau qui ont pour valeur 1. C'est ce que fait
print $fh grep { $index{$_} == 1 } keys %index;
keys %index retourne la liste des clés ("tes lignes") et grep procède chacune des clés (passés comme $_) et filtre celle dont la valeur est 1. grep retourne la liste des clés satisfaisant ce critère. Il ne reste plus qu'à l'écrire dans file2 (ouvert en ajout).
Voilà tout. N'hésite pas à demander si quelque chose n'est pas clair.
Partager