If I understand it right, you have multi-directory application with many scripts in them. If that is so, then every directory that your CGI application have will become Mojolicious::Controller, every script will become URL, and all logic will go to appropriate Controller.
If you have something like this in your application directory:
..
index.pl
dir1/somescript1
dir1/somescript2
dir2/somescript3
dir3/somescript4
then your Mojolicious application will have something like this inside:
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
script/app.pl:
#!perl
use strict;
use warnings;
use FindBin;
BEGIN { unshift @INC, "$FindBin::Bin/../lib" }
use Mojolicious::Commands;
Mojolicious::Commands->start_app('App');
lib/App.pm:
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;
lib/App/Controller/Main.pm:
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;
lib/App/Controller/Dir1.pm:
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;
Then you run it from root of your application like this:
perl script/app.pl
update: I thought that you might want to read the docs:
Mojolicious Tutorial,
Growing Guide