Hi Lutz,
One thing to be aware of, is that if you’re releasing a distribution
Math-Matrix-Banded, then your distribution needs to include a module
Math::Matrix::Banded[*].
I like the model where you also have ::Square, ::Rectangular, and ::Symmetric —
a class for each internal representation.
Not knowing anything about your planned design, could you have
Math::Matrix::Banded be the public facing interface, with the appropriate
"back-end" loaded by it? This could either be explicit, with the caller telling
you what type to use, or more DWIMish, by looking at the matrix and deciding
which of the three back-ends to use, factory method stylee:
use Math::Matrix::Banded;
my $matrix = Math::Matrix::Banded->load_from_file('foobar.matrix');
print ref($matrix), "\n";
# Math::Matrix::Banded::Symmetric
Or you could have Math::Matrix::Banded mainly a documentation module, which
tells you about the interface, and tells you to select which back-end to use,
based on your case.
Neil
[*] More accurately, you need to have an indexing permission on the package
name that corresponds to the distribution name. So you could include a dummy
Math::Matrix::Banded module in the first release so that PAUSE gives you
first-come on the namespace, and then drop the module in the next release
(PAUSE doesn’t take the indexing permission off you when you drop a module from
a distribution). But I don’t really recommend this.