My view is that for simple, one off pages, knock it up with CGI.pm - that makes things quick and easy. However, it has the disadvantage that your program logic is interspersed with the HTML. In fact, the HTML is not immediately apparent, since it is all generated by CGI calls.
Embperl is good for small to medium sites, and it is possible to implement a set of components with it. What I like about Embperl is that the programs are structured just as your static HTML would be.
Although I haven't used it, once the site gets reasonable large, Mason would be the way to go.