#!/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 }