Obtener el Conjunto de Elementos de una Lista

Ya vimos que la función uniq de List::MoreUtils devuelve el conjunto de elementos de una lista:
my @x = uniq 1, 1, 2, 2, 3, 5, 3, 4; # 1 2 3 5 4
my $x = uniq 1, 1, 2, 2, 3, 5, 3, 4; # 5
Una alternativa para obtener un array @out con los elementos no repetidos de un array @in es utilizar grep y un hash auxiliar %saw para los elementos ya vistos:
my %saw = ();
@out = grep(!$saw{$_}++, @in);
otra forma de hacerlo (Uno de los lemas de Perl es TIMTOWTDI: There is more than one way to do it!)
undef %saw;
@saw{@in} = (); # Creamos un hash con claves en @in
@out = keys %saw; 

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