Bonjour
j'ai un code qui permet de lire deux fichier ligne par ligne et de comparer ces lignes une par une et retourner les lignes qui contiennent un certain nombre de mots en commun
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
| #!/usr/bin/perl
use strict;
my $t0 = time;
my $i;
my $file1 = $ARGV[0] || 'trans3';
my $file2 = $ARGV[1] || 'gh3-3.n';
my %uniq1=();
my $count1=0; my $words1=0;
open FICC,'<',$file1 or die "$file1 : $!";
while (<FICC>) {
my @words = split /\s+/,lc $_;
++$uniq1{$_} for @words;
$words1 += @words;
++$count1;
}
close FICC;
my $uniq1 = scalar keys %uniq1;
my %uniq2=();
my $count2=0; my $words2=0;
open FIC,'<',$file2 or die "$file2 : $!";
while (my $line = <FIC>) {
my @words = split /\s+/,lc $line;
++$uniq2{$_} for @words;
$words2 += @words;
++$count2;
my @match = grep $uniq1{$_}, @words;
print $line if @match >= 2;
}
close FICC; |
Le problème c'est que je veux afficher le numéro de la ligne du premier fichier qui a été retrouvé dans le fichier n°2.
Aussi il y a des parties du code que je comprends pas:
que contient $uniq1 et $uniq1{$_}?
parce cette instruction n'est pas trop claie pour moi:
my @match = grep $uniq1{$_}, @words;
ce que je comprends qu'il cherche le contenu de $uniq1{$_} dans @words! mais comment il acède à $uniq1 sans un foreach ou sans indice
Merci
Partager