Approach 1: Have a main script (e.g. main.fcgi) that distributes work to modules #!/usr/local/bin/perl -T use Module1; use Module2; use Module3; code to initialise variables while (my $q = new CGI::Fast) { code to distribute job to Module1, Module2 or Module3 } Approach 2: Three FastCGI-aware scripts named module1.fcgi (functionally equivalent to Module1), module2.fcgi (functionally equivalent to Module2) and module3.fcgi (functionally equivalent to Module3). Each of these scripts have more or less the same structure: #!/usr/local/bin/perl -T code to initialise variables while (my $q = new CGI::Fast) { code to run }