If I didn't know Plack, no, but I do (and am trying to improve my knowledge in the area) so, yes. PSGI middlewares (Plack::Middleware) for example add a huge amount of drop-in utility that otherwise range from difficult to dirty to hack up in a hand rolled version built for a single purpose. The script could proxy or not by a map of URLs, do custom authentication in front of some, run an arbitrary number of other apps/CGIs (Catalyst/Dancer/PHP/Whatever) alongside a proxy (which would require more than a one liner in this case), display show|hide timing/debug/env in the page with JS. Each addition being one to five or six new lines of code. You also get multiple deployment options, uWSGI, Starman, Twiggy, FCGI, and several more.
Nothing wrong with bare bones Perl. Kits like Plack give you easy room for growth and adjustment.
| [reply] |
| [reply] |
:P Any webdev doing CGI instead of PSGI is hurting his or her career and free time. And there was already zentara's answer, I was just adding to the bounty. The PSGI spec is simple too; easier and more consistent than the CGI spec. I think your photo analogy is funny but not on point. PSGI is the true utilitarian option and more like Legos than the kitchen sink.
Real world sidebar: I'm currently in the first week of what I expect to be about four weeks of rewriting some CGI code that was "sufficient" when it was written. The marathon rewrite is necessary to fix something that could have been addressed with one line of Plack middleware. One dev's sufficient is the next dev's WHY OH GOD WHY?! Perl is the poster child for technical debt because it's so easy to "Just Do It." I think posting alternative strategies benefits everyone and each can choose according to his or her own level of masochism. Double :P
Update: FTR, my code is a few lines shorter than the LWP example zentara gave, does more (meaning it's more verbose than necessary), and doesn't use the problematic CGI->Vars which joins multi-values with null bits which aren't considered/handled in the example.
| [reply] [d/l] |