Before you can eliminate duplicates, you have to agree on when they are the same. When do you call things the same? This is richly ambiguous. Are two scalars that have the same string the same? How about two hash references to hashes that have identical components? And what do we do with overloaded objects?
Some idea of the complexity may be understood by saying how many distinct elements @a_list produces:
my $ref = [];
@a_list = ([[], []], [[], []], [$ref, $ref]);
There are good arguments for 1, 2, and 3...
The easiest and therefore usual answer is, "They are the same if they yield the same strings in string context." (That would give 3 above.) That is reasonable. And it can be done with 21 characters:
sub r{
#23456789_123456789_1
my%e;grep!$e{$_}++,@_
}
To do substantially better than this, what you need to do is decide on a canonical representation. For instance use
Storable to turn data into strings, using the appropriate flag for canonical order. The full code for that is..somewhat longer than for above. And will break when you start to throw around closures, etc... |