You could say they are competitors.
mod_perl is a way to embed Perl code into Apache. It also opens up some of Apache's internals for Perl. FastCGI uses a persistent process to handle CGI requests. Both reduce the overhead in running a dynamic script, but mod_perl encompasses much more than FastCGI.
I have played around with mod_perl a bit and think it is too heavy-weight for what people usually call "web programming". I would say it was made for doing pre-request stuff (things like rate limiting, filtering, request rewriting, and whatnot), but it's not the best way to do the things you expect for "plain" web programming. Using it that way also makes your Apache instance much fatter if you ever use much memory in any single one of your scripts.
Of course, FastCGI is not much better in the memory use case, but since it is a separate process, its restarting is easier (and usually automatic). Another bonus point for it is that it is not dependent on Apache, but can run on pretty much all the common web servers.
If you are looking for an easy way of boosting the speed of some existing CGI scripts, try mod_perl -- it has a pre-written handler for those kinds of scripts. Otherwise, the current fad is PSGI/Plack and some sort of backend such as FastCGI to go with it.