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...
Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
Read Where should I post X? if you're not absolutely sure you're posting in the right place.
Please read these before you post! —
Posts may use any of the Perl Monks Approved HTML tags:
- a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
| |
For: |
|
Use: |
| & | | & |
| < | | < |
| > | | > |
| [ | | [ |
| ] | | ] |
Link using PerlMonks shortcuts! What shortcuts can I use for linking?
See Writeup Formatting Tips and other pages linked from there for more info.