Larry is a fruit cake, a nut job, crazy as a loon, batty as a belfry.
Perl was created by Larry Wall. Smart guy. Has some broken mental models, but he’s smart.
Every language designer screws up now and then. No exceptions. Gosling says he got the precedence of some Java operators wrong. if (!(that’s instanceof Understatement)), I don’t know what is. McCarthy frets about all the parens in let clauses. As if those are the only ones to fret about. And Guido has been known to physically murder people who complain about Python’s syntactic whitespace.
Perl also has “contexts”, which means that you can’t trust a single line of Perl code that you ever read. Every operator in Perl (not just the Range operator) has six different behaviors depending on the invisible context in which its surrounding expression is being evaluated.
@x = (1, 2, 3, (4, 5));
It automagically turns into (1, 2, 3, 4, 5). Convenient, eh? Sure it is. If you want to be your own father’s sister, it’s extremely convenient.
It’s especially advantageous if you want to collapse the entire universe into a single electron, since that’s about all you can do with it.
Oops! Oh yeah, right. Trees. Graphs. Object models. Window systems. Company organizations. Relationships. Meaning and semantics. Heirarchical knowledge representation. Gosh. Forgot all about those. Whoops.
Like any well-designed system, Perl of course has hundreds of global variables. They’re typically two characters long, the first of which is a dollar-sign, and the second of which is either an ASCII character or a Unicode character. Changing the value of any one of these hundreds of variables changes the meaning of at least 10% of the lines of code in your code base. One can only speculate as to what $ξ does, or $葉 for that matter. I’m sure it’s in the docs somewhere.
I chatted with him afterwards about list flattening, and mentioned that it was the root of all evil. He was a bit taken aback, and said they weren’t planning on changing that feature. I read recently that they’ve decided to change it after all; you’ll have to set some godawful global variable, possibly dollar-unicode-chinese-horse-symbol, to turn on auto-list flattening.
Тут ещё много прекрасного.
Однозначный Эпик Вин.