I think CGI used to be the name of the standard that governed how form parameters would be transferred within a web server to a further processing step (e.g. a Perl script). In that sense, servlets are an implementation of CGI as well. If you are actually referring to the invocation of Perl (or whatever) scripts in response to a web request, that entails the startup of a Perl interpreter process for each request, so there'a quite a bit of overhead. More modern variants (called Fast-CGI) somehow keep that process running, and thus have lower overhead.
One of advantages of servlets is using Java language, which could be more powerful and flexible than Perl, PHP or C. Imagine that you want to write enterprise application with Perl. You will have many problems with accessing database, using transactions, using XML, using messaging etc. In Java(J2EE) you have everything ready to use.