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.

Reply via email to