Perl Modules for Array/Set Handling

### Purpose

To cross-check a personal selection of modules which offer:

: include "fancy.table.tx" { data => $purpose };

Module names are read from data/module.list.ini, which is shipped with the distro.
Each module's data has an indicator - 'include = Yes/No' - which makes it easy to edit & re-run.
Further, each module has an indicator - 'overload_type = 1/2/3' - to specify the syntax to look for when processing overloads.
Per-module notes are handled using the same mechanism.
Excluded modules are listed at the end of this report.

### Report generator

: include "fancy.table.tx" { data => $report_generator };

### Modules included

: include "basic.table.tx" { row => $modules_included };

Method names are found by scanning the source for /^sub.../.
Method names starting with '_' are ignored.
Also ignored are indented subs as in Set::Toolkit::TieArray, which is within the source of Set::Toolkit.
Sub-class files for Object::Array and Set::Scalar have been scanned and included.
Scanning the source means modules must be installed, but no attempt is made to load them at run-time.
Source files are found by running 'mwhere' which is shipped with the marvellous App::moduleswhere.
Version numbers are found by running 'mversion' which is shipped with the marvellous Module::Version.

### Methods

: include "basic.table.tx" { row => $method_data };

A cell containing 'Yes' means that module has a method of that name.
A token after 'Yes' is the overloaded operator defined in that module for that method.

Just because 2 modules have a method with the same name does not mean the subs' behaviour is identical.
For instance, symmetric_difference() in Set::Tiny and Set::Scalar return different lists.
Not only that, but Set::Tiny's method returns a set, whereas Set::Scalar's returns a string.
Further, some methods in Set::Array change the invocant object, which is an apalling design feature.
Sample code ships as scripts/symmetric.demo.pl.
As always, RTFM!

In order to make life difficult:

Object::Array fiddles a list of method names copied from List::MoreUtils.
Set::Light has 2 aliases for exists: has and contains.
Set::Object and Set::Toolkit define some overloads via subs. These are ignored.

### Modules excluded

: include "basic.table.tx" { row => $modules_excluded };

### Environment

: include "fancy.table.tx" { data => $environment };