#!/usr/bin/perl # quitapal.pl - Script que quita las palabras listadas en el fichero dado como # parámetro, por defecto pals.txt, del texto que reciba por la # entrada estándar, sacando el resultado por la salida estándar $nomprog = "quitapal.pl"; $fichpals = "pals.txt"; # Chequeamos si nos dan el fichero de palabras o cogemos el por defecto if (scalar @ARGV == 1) { # ARGV son SOLO los parámetros. El programa es $0 $fichpals = $ARGV[0]; # Los vectores empiezan en cero, igual que en C } open (FICHPALS, "$fichpals") || die "No se puede abrir el fichero $fichpals\n"; # Open the file. Complain if unable # Vamos a llenar el vector @pals con todas las palabras que vamos a quitar while () { s/\n//; push (@pals, $_); # Vamos añadiendo las nuevas palabras } close FICHPALS; # Ya tenemos todas las palabras de las que nos tenemos que deshacer guardadas # Ahora, a hacer el trabajo while (<>) { # Quitamos los saltos de línea, para ganar *un*montón* de rapidez # en las búsquedas chop; # Si lo que nos encontramos en esta línea es una nueva entrada, la # escribimos y la quitamos, dejando el resto para quitar las palabras # que tengamos que quitar. Esto lo hacemos para evitar sustituir # palabras en los títulos de las entradas, como por ejemplo en "phase # OF THE moon" if (/^:[^\:]+:/) { # Necesitamos una lista auxiliar para guardar el resultado de # esto (queremos lo que está entre paréntesis) @listafoo = (/^(:[^\:]+:)/); print "\n\n$listafoo[0]\n"; # Ahora quitamos el nombre de la entrada s/^:[^\:]+://; } # Quitamos además los signos de puntuación y los números s/^ +|[-,\.;'`"\(\)\d\[\]\/!*\{\}\?]//go; foreach $palabra (@pals) { # Para cada palabra, vamos buscando u-y/o-e quitando s/ +$palabra *\b/ /gi; # s/([\W\-])$palabra([^\w\-])/$2/gi; # s/^[ \t]*$palabra([^\w\n\-])//i; } print ; }