in reply to Thorny design problem

Perhaps it's an aversion to using eval,
You don't need the eval here -- this works:
# eval "require $module; $module\::do_it( '$dir' ); 1" require "$module"; $module->do_it( $dir );
As for the general approach, it looks fine (and avoids repetition).. i've see that (e.g. load everything in the Plugins subdir) used in other modules (can't think of a name offhand but will go poke around and then update)...

Update: doh. i am too slow...

Update: Chemistry::File can autoload the Chemistry::File::* modules

Update: added the quotes on the require argument.