Usuario:JoaquinFerrero/Filtrado Múltiple Enlazamiento

Este programa filtra los enlaces repetidos de una página Wiki que se pase como argumento, en forma de archivo.

#!/usr/bin/env perl
#
# Filtrado del enlazamiento múltiple en código Wiki.
# Joaquín Ferrero. Septiembre 2013.
#
# Lo que hace este programa es eliminar los enlaces duplicados
# para que solo aparezcan una vez a lo largo de toda la página.
#
# 20130923. Primera versión
# 20130925. Segunda versión, mejor tratamiento de enlaces con descripción alternativa

use v5.16;
use utf8::all;
use autodie;

@ARGV == 1
    or die "Uso: $0 <archivo a procesar>\n";

my $archivo = shift;

-r $archivo
    or die "ERROR: No puedo leer [$archivo]: $!\n";

my %ya_visto;

open my $ARCH, '<:utf8', $archivo;

while (my $linea = <$ARCH>) {

    while ($linea =~ /\[\[(.+?)\]\]/g) {

        my $enlace = $1;

        if ($ya_visto{$enlace}++) {

            my $posicion = $-[0];						# primera posición detectada

            my $enlacedestino = $enlace  =~ s/^.+[|](.+?)$/$1/r;		# simplificamos enlaces con descripción

            #say $linea, (' ' x $posicion), "\\", ('-' x (length($enlace)+2)),  "/\n[$enlace]=>[$enlacedestino]";

            $linea =~ s/\[\[\Q$enlace\E\]\]/$enlacedestino/;			# esta es la buena

            pos($linea) = $posicion;						# volvemos atrás
        }
    }

    print $linea;
}

close   $ARCH;