#!/usr/bin/perl -w

# Ejercicio 7: Abre un fichero y cuenta el numero de palabras diferentes

 

 

# Pide el nombre del fichero

print "Introduce el nombre del fichero a analizar\n";

$nombre = <STDIN>;

chomp $nombre;

 

# Abre el fichero.

# En caso de que no pueda abrir el fichero da una indicación de error mediante

# la función die.

# $! da el número de error que se ha producido

 

open(LIBRO,$nombre) or die "Error al abrir fichero $nombre $! \n";

 

 

# Inicializamos el array asociativo %pal con todo vacio.

# Este array usará como claves las distintas palabras que aparecen en el texto,

# y como valor un contador del número de veces que ha aparecido esta palabra.

 

%pal = ();

 

# Mediante la sentencia foreach vamos leyendo una a una todas las líneas del fichero.

# Dividimos la línea en palabras mediante la funcion split, usando como caracter de

# separación el espacio en blanco ' '.

# Para cada palabra comprobamos si ya está en el array asociativo que contiene cada

# palabra usando la función exists. Si ya existía incrementamos el contador de palabras,

# si no existía esa palabra ponemos el contador a 1.

#

# Otra forma de hacerlo sería no comprobar si ya existe la palabra, sino incrementar

# directamente el contador, suponiendo que una variable no inicializa esta a 0.

 

 

foreach $cada_linea (<LIBRO>) {

      @palabras = split(' ', $cada_linea);

      for ($i= 0; $i<scalar @palabras; $i++) {

            if (exists($pal{$palabras[$i]})) {

                  $pal{$palabras[$i]}++;      

                  }

            else {

                  $pal{$palabras[$i]} = 1;

                  }    

      }

}

 

# Vamos a imprimir los resultados

 

foreach $clav (keys %pal)

      {

      print "Hay $pal{$clav} de tipo $clav\n";

      };

 

@claves = keys %pal;

$num =  $#claves;

print "Las palabras distintas son: $num\n";

close(LIBRO);

exit;