Palabras Repetidas

Su jefe le pide una herramienta que compruebe la aparición de duplicaciones consecutivas en un texto texto (como esta esta y la anterior anterior). La solución debe cumplir las siguientes especificaciones: Esta es la solución:
   1 #!/usr/bin/perl -w
   2 # one <a>one</a>
   3 # is two three
   4 # three
   5 $/ = ".\n";
   6 while (<>) {
   7   next if !s{
   8     \b                 # start word ...
   9     ([a-z]+)           # grab word in $1 and \1
  10     (                  # save the tags and spaces in $2
  11     (\s|<[^>]+>)+      # spaces or HTML tags 
  12     )   
  13     (\1\b)             # repeated word in $4
  14   }
  15   "\e[7m$1\e[m$2\e[7m$4\e[m"igx;
  16   s/^([^\e]*\n)+//mg;  # remove lines that don't contain escapes
  17   s/^/$ARGV: /mg;      # insert filename at the beginning of the lines
  18   print;
  19 }

Normalmente el carácter ^ casa solamente con el comienzo de la cadena y el carácter $ con el final. Los \n empotrados no casan con ^ ni $. El modificador /m modifica esta conducta. De este modo ^ y $ casan con cualquier frontera de línea interna. Las anclas \A y \Z se utilizan entonces para casar con el comienzo y final de la cadena.

Sigue un ejemplo de uso:

> cat double.in
one <a><b>one</b></a>
is two three
 
 
three
.
 
xxxx
>       
> doublee.pl double.in
double.in: one <a><b>one</b></a>
double.in: is two three
double.in: three

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19