I've done something similar for some private modules. Ways I've come up with are:
- Make the data file into a package of its own. For instance, a config file for My::Foo becomes My::Foo::Config, and My::Foo just uses it.
- If the data file can't be turned into a package for whatever reason, then use the Makefile.PL to ask the user at install-time where the data files will be located. Then have Makefile.PL generate the config module like above which contains the absolute path to the data.
I wanted to explore how Perl's closures can be manipulated, and ended up creating an object system by accident.
Note: All code is untested, unless otherwise stated