I am working on a pretty complex distribution, and I could use some
advice on how to structure its directories.

This distribution contains several modules, not all under the same
directory (i.e. A.pm, B.pm, A/X.pm, B/Y.pm, etc.).

Moreover, some of these modules are Perl extensions, so there's a
whole bunch of *.xs, *.c, *.h, and typemaps files associated with
them [1].)

In addition, the distribution includes several scripts.

Some of these scripts are part of the distribution proper.

Other scripts are code-generating scripts with *.PL suffix (and I
don't just mean Makefile.PL, but additional *.PL scripts). The
resulting *.pl scripts are part of what is ultimately installed.

The remaining scripts (e.g. Configure.pl, and test scripts) are
run during installation.

The distribution also includes separate *.pod and *.html doentation

Lastly, this distribution includes several LARGE data files (they
account for 95% of the installed distribution's footprint).

What directory structure would you use for such a distribution?
Is there anything like a consensus on this?

Many thanks!


[1] I have seen many cases in which, e.g., Foo.xs file is placed
at the top of the distro, while the corresponding Foo.pm (which
defines the package Bar::Baz::Foo) is placed either in $TOP_OF_DISTRO
or in $TOP_OF_DISTRO/lib/Bar/Baz. I get the impression that there
is something against putting Foo.xs in $TOP_OF_DISTRO/lib/Bar/Baz.
Is this the case, and why? The cases in which Foo.pm is put in
$TOP_OF_DISTRO, right alongside Foo.xs, and not in
$TOP_OF_DISTRO/lib/Bar/Baz also puzzle me.

To s&e^n]d me m~a}i]l r%e*m?o\v[e bit from my a|d)d:r{e:s]s.