In order to extend the functionality of Math::Symbolic, you have to go through the following steps: (also
see the synopsis in this document.)
• Choose an appropriate namespace in the Math::Symbolic::Custom::* hierarchy or if you desparately
wish, somewhere else.
• Create a new module (probably using "h2xs -AX MODULENAME") and put the following lines of code in it:
# To make sure we're cooperating with Math::Symbolic's idea of
# method delegation.
use Math::Symbolic::Custom::Base;
BEGIN {*import = \&Math::Symbolic::Custom::Base::aggregate_import}
our $Aggregate_Export = [
# Put the list of method names to be exported.
/];
• Think well about the naming of your exported methods. Answer the following questions:
Does the name start with 'is_', 'test_', 'mod_', 'apply_', 'contains_', or 'to_'? If not, find a
suitable name that does.
Does the name clash with any of the methods exported by Math::Symbolic::Custom::DefaultTests,
Math::Symbolic::Custom::DefaultMods, or Math::Symbolic::Custom::DefaultDumpers? If so, please
consider choosing a different name.
Does the name map to the idea behind the method prefix ('is_', ...)? Only methods starting with one
of the prefixes listed above can be delegated. Any others will never be called. The idea behind
delegating methods with several prefixes is to provide for a reasonable choice for naming methods.
'is_' and 'contains_' are meant to be used for accurate tests like "is_constant". 'test_' is meant
for all tests that either make use of heuristics or can't be fitted into either 'is_' or 'contains_'.
The prefixes 'mod_' and 'apply_' are meant for use with methods that modify the Math::Symbolic tree.
Finally, the prefix 'to_' is meant to be used with conversion and output methods like 'to_latex' or
'to_string'. (Though as of version 0.122, to_string is implemented in the core Math::Symbolic
modules.)
• Make sure you document exactly what your methods do. Do they modify the Math::Symbolic tree in-place
or do they clone using the new() constructor and return a copy? Make sure you mention the behaviour
in the docs.
• Consider packaging your extensions as a CPAN distribution to help others in their development with
Math::Symbolic. If you think the extensions are generic enough to be a worthwhile addition to the
core distribution, try sending your extensions to the Math::Symbolic developers mailing list instead.
• Load your extension module after loading the Math::Symbolic module.
• Start using your custom enhancements as methods to the Math::Symbolic trees (any term types).
• Send bug reports and feedback to the Math::Symbolic support mailing list.