I'm developing a Dancer app with the setup outlined below (ie. modules 'use'-ing other modules) but I'm confused about when to 'use' various modules and Perl version statements. My config.yml has Template Toolkit selected so my first question is do I need to specify 'use Template' in each module that uses the 'template()' call or is that all taken care of once the config has been specified. If it is taken care of, does that apply to all the 'nested' modules? Next, do I need to specify 'use Dancer qw(:syntax)' in every module which makes use of Dancer functions? Again with 'use 5.014' - in every module or is once enough in the App::Routes module, for example? I suppose what I'm unclear about is what an imported module can access that is in the importing module/script. gvim **************************************** package App::Routes; use 5.014; use Dancer qw(:syntax); use App::Login; use App::Logout; use App::Register; ........ post '/login' => sub { App::Login::run }; post '/logout' => sub { App::Logout::run }; post '/register' => sub { App::Register::run }; ......... 1; **************** App/Register.pm ************************ package App::Register; use 5.014; use Dancer qw(:syntax); use App::Validate; sub run { my $valids = validate(params()); # Validate and process any errors then return %form ............ template 'register_user', {form => $valids}; }; 1; ***************** App/Validate.pm *************************** package App::Validate; use 5.014; use Data::FormValidator; use Dancer qw(:syntax); BEGIN { use Exporter; our @ISA = 'Exporter'; our @EXPORT = 'validate'; } sub validate { my $params = shift; my $results = Data::FormValidator->check($params, \%profile); ......... template 'errors', {invalid => $results->invalid, missing => $results->missing}; return $results->valid; } my %profile = ( ............ ); 1;