Exactly...WTF!
Perl and Perl's hacker community, when you think about it, did amazing feats, bending Perl to take whatever shape they wanted/needed.
People wanted OOP - Perl's closures allowed that. Perl's OOP is better than most would think. (Read: Object-Oriented Perl).
Want to program in functional-style? They proved you could do a lot of FP stuff in Perl. (Read: Higher-Order Perl).
They even went ahead and gave Perl a Meta-Object Protocol, sort of CLOS-style (CLOS = Common Lisp Object System, which some would argue is the most advanced out there).
And Perl is pretty fast, when compared to Python or Ruby.With a huge number of libraries (CPAN).
So Perl is pretty successful and has held its own as one very flexible language. The fact that the language did not change much, and yet achieved so much, is really a testament to its happy, fortuitous design.
IMHO some mistakes were made in not supporting things that are not Perl per se, but would be crucial in a modern programming language:
- Perl is a PITA for C-interoperability and a lot of Python these days is about, in fact, using a deeper C layer (why not more Lua, then?). C is crucial for speed (that means number-crunching and graphics), for software re-use, and its *the* lingua franca of software.
- Some sort officially-sanctioned GUI should've been adopted. Again, this isn't Perl per se, but having mult-platform GUI support could've secured a better position at the desktop space (but most Perl people work at the data center/server level).
And then there's Perl6...Perl6 was supposed to be great - its design is great - but IMHO the developers made the mistake of forgetting the lessons of the past, forsaking an advanced functional language for the implementation of complex language features - this despite Audrey Tang's effort - and then got caught in a labyrinth they can't get seem to get out of. And this move might have been caused by pure prejudice against Haskell or sheer stubborness, I don't know.
Whatever the reasons (and to be fair, one got tired of following the slow progress of Perl6), letting Pugs die when Audrey had done so much by herself just didn't seem rational at all. Maybe it was, maybe it wasn't, but if the history of programming languages servers as a parameter, the odds were in favor of a Haskell (or SML, or Ocaml, etc.) implementation, because the advanced features Perl6 was aiming for, to my knowledge, were never decently implemented with the usual bag of C-oid tools (the olnly thing that comes to mind is Mathematica, which was very buggy in its initial version, when compared to Maple). Smalltalk, Lisp, etc. They all seem to built some sort of interpreter or language kernel and grow the language from there. It doesn't seem that was what the Perl6 implementors were doing. It's almost as if they were emulating the Java developers - and we know how long it took then to implement a modicum of advanced language features over there...