#!/usr/bin/perl -w
use strict;
use constant NL => qq[\n]; # a less ugly new line
my(@list) = qw/ 1 2 3 a b c do re mi so you see rm -v one 3 b A mi si -v /;
print join(' ', &remove_dups_fast( @list ));
print NL x 2;
print join(' ', &remove_dups_ordered( @list ));
print NL x 2;
# faster method, if original order of the list doesn't matter
sub remove_dups_fast { my(%clean) = (); @clean{ @_ } = (); sort keys %clean }
# slightly slower method that preserves the original order of the list
sub remove_dups_ordered {
my(@raw) = @_;
my(@clean,%lookup) = ();
@lookup{ @raw } = @raw;
foreach (@raw) {
my($item) = delete $lookup{$_};
push(@clean, $item) if defined $item;
}
return @clean
}