List::Uniq - extract the unique elements of a list
use List::Uniq ':all'; @uniq = uniq(@list); $list = [ qw|foo bar baz foo| ]; $uniq = uniq($list);
List::Uniq extracts the unique elements of a list. This is a commonly re-written (or at least re-looked-up) idiom in Perl programs.
uniq() takes a list of elements and returns the unique elements of the list. Each element may be a scalar value or a reference to a list. List references will be flattened before the unique filter is applied.
If the first element is a hash reference it is taken to be a set of options that alter the way in which the unique filter is applied. The keys of the option set are:
A code reference that will be used to sort the elements of the list if the sort option is set. Passing a non-coderef will cause uniq to throw an exception.
The code ref will be passed a pair of list elements to be compared and should return the same values as the cmp operator.
Using a custom sort slows things down because the sort routine will be outside of the List::Uniq package. This requires that the pairs to be compared be passed as parameters to the sort routine, not set as package globals (see perlfunc/sort). If speed is a concern, you are better off sorting the return of uniq yourself.
The return value is a list of the unique elements if called in list context or a reference to a list of unique elements if called in scalar context.
Nothing by default.
Optionally the uniq function.
Everything with the :all tag.
If you want to unique a list as you insert into it, see Array::Unique by Gabor Szabo.
This module was written out of a need to unique an array that was auto-vivified and thus not easily tied to Array::Unique.
James FitzGibbon, Primus Telecommunications Canada Inc. <jfitzgibbon@primustel.ca>
The idioms used to unique lists are taken from recipe 4.7 in the Perl Cookbook, 2e., published by O'Reilly and Associates and from the Perl FAQ section 5.4.
I pretty much just glued it together in a way that I find easy to use. Hopefully you do too.
Copyright (c) 2004-2008 Primus Telecommunications Canada Inc. All Rights Reserved.
This library is free software; you may use it under the same terms as perl itself.