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.