Sí que es un ejercicio interesante, sí.
Hay muchas formas de resolverlo, claro. Aquí hay una de las posibles:
Using perl Syntax Highlighting
#!/usr/bin/perl
use v5.14;
use autodie;
use File::Slurp;
my @archivo = read_file('code_37612.txt');
my @nuevo_archivo;
my %ya_vista;
for my $linea (@archivo) { # para todas las líneas
if ($ya_vista{$linea}++) { # vemos si ya hemos visto esa $linea
if ($ya_vista{$linea} == 2) { # si es la segunda vez que la vemos
@nuevo_archivo
= grep { ! /^$linea$/ } @nuevo_archivo; # extraemos la primera ocurrencia
}
}
else {
push @nuevo_archivo, $linea; # si no la hemos visto, la agregamos
}
}
print @nuevo_archivo;
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
La idea es que si la $linea no la hemos visto todavía, la agregamos a la salida, en el
array @nuevo_archivo. Si sí la hemos visto, no la agregamos. Si es la segunda vez que la vemos, quitamos la primera ocurrencia.
Esta solución es clara, pero quizás podría no ser eficiente, por el tema del grep{}. Lo ideal es que supiéramos qué línea debemos quitar.