|Do you know where your variables are?|
I'd chime-in with three answers for that: CPAN, CPAN, and finally, CPAN.
Where else could you find something like, oh, say, Image::Flight::Suborbital (or maybe Device::USB::MissileLauncher::RocketBaby, just for fun...) and you can put that into your to your “web” (sic...) application and with a little bit of straightforward coding, “it just works?”
You can start with a requirement to do almost anything at all and find CPAN modules which do it. (Including, by the way, CGI authentication and passwords...)
And throughout it all... TMTOWTDI. The problem with “there's only one way to do it” is that, eventually, you will bang into that. No matter how good “that one way” might be, nor to how many people, if you do run into a limitation, you won't be able to fix the problem within that language.
Try this link: Catalyst. On the one hand, yes, “Catalyst is a web framework.” But on the other hand, you are looking at a list of (today) 906 links, and all of them are “real.” You say that you'd like to incorporate XML RPC-calls neatly into your app? It's there. Oh... you say you don't prefer Catalyst? Try: CGI::Application or Mojo or Jifty or ... ...
Notice: you are still in Perl. So, whether your favorite pasttime is “a web application” or sub-orbital flight paths, or maybe just a rocket-baby, you haven't left Perl.
And that is “what all the fuss is about.” :-D