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
| use Data::Dumper;
my $chaine1 = "ma toute premiere chaine";
my $chaine2 = "ma deuxieme chaine";
my @tab1 = split / /, $chaine1;
my @tab2 = split / /, $chaine2;
my ($s1, $s2, $diff1, $diff2);
my (@similitudes, @differences_chaine1, @differences_chaine2);
if (@tab1 < @tab2) { # on se base sur la chaine la plus courte
($s1, $s2, $diff1, $diff2) = (\@tab1, \@tab2, \@differences_chaine1, \@differences_chaine2);
} else {
($s1, $s2, $diff1, $diff2) = (\@tab2, \@tab1, \@differences_chaine2, \@differences_chaine1);
}
foreach my $i (@{$s1}) { # pour chaque mot de la chaine la plus courte
if (grep /^$i$/, @{$s2}) { # si il existe dans l'autre chaine
push @similitudes, $i; # on l'ajoute aux similitudes
} else {
push @{$diff1}, $i; # sinon aux differences de la chaine la plus courte
}
}
foreach my $j (@{$s2}) { # pour chaque mot de la chaine la plus longue
if (! grep /^$j$/, @similitudes) { # si il n'est pas dans les similitudes
push @{$diff2}, $j; # c'est qu'il est dans les differences de la chaine la plus longue
}
}
print "=== similitudes : ===\n" . Dumper \@similitudes;
print "=== differences chaine1 : ===\n" . Dumper \@differences_chaine1;
print "=== differences chaine2 : ===\n" . Dumper \@differences_chaine2; |
Partager