#!/usr/bin/perl -w

# compter le nombre d'occurences de chaque mot d'un texte
# => utiliser un tableau associatif indexé par les mots
# compter le nombre de mots différents
# => nombre de cases du tableau
# compter le nombre total de mots
# => solution bis : 
#    compter ce total au fur et à mesure de la lecture
 
my %tab_words = ();
my $nb_words = 0; 

# lit chaque ligne du texte
# et remplit le tableau d'occ
# et calcule le nb total de mots
while (<>) {
    chomp;
    my @ligne = split;

    # ajoute les mots de la ligne courante 
    $nb_words += $#ligne + 1;

    foreach $i (@ligne) {
	# ajoute 1 au nb d'occ du mot $i
	$tab_words{$i}++;
    }
}

# affiche tout le tableau associatif d'occ
print "Nombre d'occurences de chaque mot :\n";
while (($word,$nb) = each(%tab_words)) {
#    print $word, " ", $nb, "\n";
    printf "%3d  %s\n", $nb, $word;
}

# nb mots differents = nb cases tableau
my @listk = keys(%tab_words);
my $nb_unique_words = $#listk +1;

print "Nb total mots : ", $nb_words, "\n";
print "Nb mots différents : ", $nb_unique_words, "\n";