..
index.pl
dir1/somescript1
dir1/somescript2
dir2/somescript3
dir3/somescript4
####
script/app.pl
lib/App.pm
lib/App/Controller/Main.pm
lib/App/Controller/Dir1.pm
lib/App/Controller/Dir2.pm
templates/layouts/default.html.ep
templates/main/index.html.ep
####
#!perl
use strict;
use warnings;
use FindBin;
BEGIN { unshift @INC, "$FindBin::Bin/../lib" }
use Mojolicious::Commands;
Mojolicious::Commands->start_app('App');
####
package App;
use Mojo::Base 'Mojolicious';
sub startup {
my $self = shift;
my $r = $self->routes;
$r->get('/')->to('main#index');
$r->get('/dir1/somescript1')->to('dir1#somescript1');
$r->get('/dir1/somescript2')->to('dir1#somescript2');
$r->get('/dir2/somescript3')->to('dir2#somescript3');
$r->get('/dir2/somescript4')->to('dir2#somescript4');
}
1;
####
package App::Controller::Main;
use Mojo::Base 'Mojolicious::Controller';
sub index {
my $self = shift;
# will render templates/main/index.html.ep
# logic from index.pl
$self->render();
}
1;
####
package App::Controller::Dir1;
use Mojo::Base 'Mojolicious::Controller';
sub somescript1 {
my $self = shift;
my $params = $self->req->params->to_hash;
# logic from dir1/somescript1.pl
# all HTML goes to templates/dir1/somescript1.html.ep
$self->render();
}
# etc...
1;
####
perl script/app.pl