Shameless self promotion yes, but Class::Autouse has a lot of stuff for dynamically loading classes.
If your module naming scheme is purely internal you can always
use Class::Autouse;
Class::Autouse->autouse_recursive( 'Module::Root' );
and then at any time in the code
$state->method();
Once you have specified the module root with the autouse_recursive, it will load anything under that namespace on demand the first time a method is called.
Or if your lazy just...
use Class::Autouse qw{:superloader};
$anyclass->anymethod;
...should work OK, but the superloader is a little bit of overkill... :)