Set::Object - set of objects
use Set::Object; $set = Set::Object->new();
This modules implements a set of objects, that is, an unordered collection of objects without duplication.
Return a new Set::Object containing the elements passed in list. The elements must be objects.
Set::Object
Add objects to the Set::Object. Adding the same object several times is not an error, but any Set::Object will contain at most one occurence of the same object. Returns the number of elements that were actually added.
Return true if all the objects in list are members of the Set::Object. list may be empty, in which case true is returned.
true
Return the objects contained in the Set::Object.
Return the number of elements in the Set::Object.
Remove objects from a Set::Object. Removing the same object more than once, or removing an object absent from the Set::Object is not an error. Returns the number of elements that were actually removed.
Empty this Set::Object.
Return a textual Smalltalk-ish representation of the Set::Object. Also available as overloaded operator "".
Return a new Set::Object containing the intersection of the Set::Objects passed as arguments. Also available as overloaded operator *.
Return a new Set::Object containing the union of the Set::Objects passed as arguments. Also available as overloaded operator +.
Return true if this Set::Object is a subset of set. Also available as operator <=.
Return true if this Set::Object is a proper subset of set Also available as operator <.
Return true if this Set::Object is a superset of set. Also available as operator >=.
Return true if this Set::Object is a proper superset of set Also available as operator >.
This module is partly written in C, so you'll need a C compiler to install it. Use the familiar sequence:
perl Makefile.PL make make test make install
This module was developed on Windows NT 4.0, using the Visual C++ compiler with Service Pack 2. It was also tested on AIX using IBM's xlc compiler.
The following benchmark compares Set::Object with using a hash to emulate a set-like collection:
use Set::Object; package Obj; sub new { bless { } } @els = map { Obj->new() } 1..1000; require Benchmark; Benchmark::timethese(100, { 'Control' => sub { }, 'H insert' => sub { my %h = (); @h{@els} = @els; }, 'S insert' => sub { my $s = Set::Object->new(); $s->insert(@els) }, } ); %gh = (); @gh{@els} = @els; $gs = Set::Object->new(@els); $el = $els[33]; Benchmark::timethese(100_000, { 'H lookup' => sub { exists $gh{33} }, 'S lookup' => sub { $gs->includes($el) } } );
On my computer the results are:
Benchmark: timing 100 iterations of Control, H insert, S insert... Control: 0 secs ( 0.01 usr 0.00 sys = 0.01 cpu) (warning: too few iterations for a reliable count) H insert: 68 secs (67.81 usr 0.00 sys = 67.81 cpu) S insert: 9 secs ( 8.81 usr 0.00 sys = 8.81 cpu) Benchmark: timing 100000 iterations of H lookup, S lookup... H lookup: 7 secs ( 7.14 usr 0.00 sys = 7.14 cpu) S lookup: 6 secs ( 5.94 usr 0.00 sys = 5.94 cpu)
Jean-Louis Leroy, jll@skynet.be
Copyright (c) 1998-1999, Jean-Louis Leroy. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the Perl Artistic License
perl(1). overload.pm
To install Set::Object, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Set::Object
CPAN shell
perl -MCPAN -e shell install Set::Object
For more information on module installation, please visit the detailed CPAN module installation guide.