I used perl for about 5 years for general scripting tasks. It's not about there being too many ways to do something for me, it's that you need to know the subtlety of each one and cryptic abbreviations.
Can you suggest a real usable pragmatic option to Perl on a Unix scripting environment?
Python and Ruby tried to compete with Perl at the large application level. Interacting with databases and other stuff kind of things.
That still doesn't fulfill the requirements Perl was invented for. Larry Wall invented Perl not because he wanted a Python or Ruby, The Python and Ruby of that time were already present in the form of C. Perl was invented because C couldn't do a certain things well. Namely it never natively blended with the Unix philosophy. It couldn't do 'Text' properly. It could not be what awk, sed, grep and other Text processing utilities combined together would be.
Besides all that, Perl is a natural evolution to bash, shell, sed, awk, tr, cat and many many other text processing utilities combined together working together in a very large application. That continues to remain Perl's biggest and most distinctive unbeatable advantage so far.
Perl is a natural extension to Unix, and it has evolved to now be capable of doing nearly everything. If the name Perl would not have been given to Perl, it would probably Unix programming language. Think of it in that terms.
Do you know why despite so much trolling, bashing and criticism Perl receives. It still manages to grow and thrive year after year, decade after decade? Its because Perl is same as C, Lisp, SQL etc. Its a first time done right language.
Anything that is likely to replace Perl, will be a bad replacement to Perl. Or at maximum will be or look like Perl(Eg Perl 6).
To kill Perl you may have to kill the whole Unix philosophy. Because that is what Perl is. Its a natural extension to Unix.
Perl is here to stay for decades to come.
Every new generation of programmers will discover Perl and use it just like how every new generation of programmers discover and use C and Lisp. That is what enables stuff like DuckDuckGo to be built in Perl.
I'll probably get downvoted for this. I know Perl very well which is why I don't use it.
I disagree with you...
If UNIX was a schizophrenic, paranoid, indecisive, eclectic, personality-disorder equipped operating system, then you'd be right but it's not. It's pretty well thought out (I exclude Linux from that which is a right mess).
Perl is not a natural evolution of, but a putrid mishmash of shell, sed, awk, tr, cat etc bundled into an incongruous monolithic blob with groupies from the cult of CPAN knocking off the edge cases left right and centre when it doesn't do what you want (using bits of C in some cases!!).
Perl is not the UNIX philosophy of small tools and loose coupling. It's entirely the opposite: A monolithic turd that just won't flush.
DuckDuckGo was probably built in Perl beause the individual who built it probably knew Perl. You could build DDG in C# or Java if you really wanted! (and it'd spend less time waiting for the Perl interpreter to tick).
One can build anything in any language(considering the mathematical possibility). So by this definition we can all go back to building in Nand gates. But that is not what its all about.
Languages get used because they do a certain job well. Perl does, what it was designed to do very well. That is precisely what Larry wall's water bed theory of complexity is about(http://en.wikipedia.org/wiki/Waterbed_theory).
You have a problem with CPAN? With CPAN, really? A ecosystem that is considered as a killer feature which no other language has managed to emulate so far?
Outside Lisp, Perl is probably the most flexible and most extensible language that exist. The entire CPAN is a standing proof of that.
Have you read Mark Jason Dominus's Higher order Perl, Have you read chromatic's Modern Perl? When you talk of elegance and power?
You call Perl a mess of a hundred text processing utilities. Can you show me one language that does regular expressions as well as Perl? Can you show me one language that handles Unicode better than Perl? Every other language I know creates huge spaghetti mess for even simple things like opening files and matching regular expressions. Have you used things like Parse::RecDescent??
Perl also gave a lot of other beautiful things to the world. Thinks like the Artistic License.
Not just that Perl is the only language community that has had more syntax based feature additions in the recent past than the rest. They have managed to release great features in the recent past.
CPAN is a mess of poor maintenance and poor documentation. It's also painfully coupled to everything.
Perl is monolithic. There is too much in the core.
I've read large chunks of HOP whilst tryingand I just can see how some things are pooly shoehorned into the language. Some of the tricks with the reference semantics are horrible.
Java and C# do Regex and Unicode better than Perl. Go does unicode better than Perl. The API in C# is not much more verbose and the RE implementation is significantly faster. It's also much easier to unit test.
Perl has too much syntax - so much so it doesn't fit in your head.
I think Perl has a nostalgic attraction but that is it.
There is too much in Perl core but Python with all those batteries is good, right?
Oh, C'mon. Why make your hypocrisy so apparent?
Java and C# do Regex and Unicode better? What was this? Java and C# have Perl compatible regular expressions(PCRE) I don't really understand what you mean when you say Java and C# do Regexes better than Perl. Because they are copied from Perl. Besides a single Regex in those languages comes wrapped in layers and layers code surrounded by 10's of lines of exception handling mechanisms. Perl is the only language which deals with such use cases sanely.
Perl was the first general purpose scripting language which had first class support regular expressions. Associative arrays. And you call that shoe horning? What about all other scripting language that added the same thing. Python doesn't even have multi line lambda's. Ruby make OO one true way of programming by its very language design.
Let me tell you what problem you have.
You hate Perl for some reason. You are just looking for reasons to justify that. While none exist.
As I said like it or not Perl is here to stay for decades. Because no matter how you bash, troll and whine about Perl. Its utility is supreme in certain areas which is very difficult to beat.
With all due respect to a fellow member, how does Java do Regex better than perl? When I attempt to use the Java Regex, I miss several features I am used to even in Python. Perl invented Regex, which helps explain why the syntax does what it should.
If you use Perl in CGI only then you seem to misunderstand lots of stuff. The Perl interpreter is loaded once per FastCGI task, so noone waits.... its the startup (which is then 100times faster against C# or Java, but whatever, not the topic). So please, dont compare Apples with Pears.
Impressive post... Perl Marketing and DuckDuckGo wanna thank you for those wise words :-) (from a guy working for both). Would be nice if you would get into contact with me: getty@duckduckgo.com or getty@cpan.org ;)
In probably 99% of Perl code, you only need to know two cryptic symbols: $! for errno and $? for child-process exit status. And if you're programming in shell now, you're already using $?.
Yes, there are symbols for handling autoflush on handles, input/output record separators, etc. But rarely will you need to use these items. In fact, we have methods for handling these situations for quite some time now.
For instance, to unbuffer your output you'd use $|, but now you just use $filehandle->autoflush(1). Another example would be undefining the input record separator so that you could pull in an entire file with one read, but now that's handled via Slurp::slurp_file.
Regarding "cryptic abbreviations", do you know about "use English;"? It provides readable names for all the "ugly punctuation variables". It's included as part of the core Perl install.