in reply to The Mother Tongue

As an aside, you might not want to commit the: my %uniq; @uniq{@arr} = (1) x @arr; @arr = keys %uniq; idiom to memory too closely, because it's broken :)
my @arr = ("what", "the", "the", {"heck" => "I"}, {"heck" => "I"}, "don't", "get", "this"); my %uniq; @uniq{@arr} = (1) x @arr; @arr = keys %uniq; print join "\n", @arr;
prints:
this
don't
the
HASH(0x1002f4e0)
get
HASH(0x1002116c)
what
perldoc -q duplicate offers a few ways to do this depending on what you mean by "removing duplicates", but upon brief inspection it doesn't look like any of those would catch this problem either.

Hmmm...an interesting golf perhaps? :)

(Here's what it looks like in Python, if that helps any)

Replies are listed 'Best First'.
(MeowChow) Re2: The Mother Tongue
by MeowChow (Vicar) on Sep 06, 2001 at 20:50 UTC
    It's hardly broken; as with any code, one must understand how and why it works, what are its limitations, and not go about applying it blindly to every situation (eg. a deep compare of nested data structures). In any case, the simple-minded (shallow) approach is usually the one that is wanted for this task, especially when writing in OO-style.

    As a further aside, my idiom is usually:
      
    my %uniq; undef @uniq{@arr}; @arr = keys %uniq;

       MeowChow                                   
                   s aamecha.s a..a\u$&owag.print
      Or you could do:
      sub uniq { my %u; @u{@_} = @_; return values %u; } @a = uniq @a;