#!/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;