It does if you bother to learn the language, rather than assuming that it's a pastiche of whatever features you bothered to osmose from a smörgåsbord of whichever other languages you might have encountered.
> It just doesn't "make sense".
The notion that a programming language both can and should be completely intuitive to novices who don't have to bother to learn an arbitrary list of syntax rules is absurd on its face.
Parentheses never create first-class lists in Perl. They only ever group expressions and disambiguate precedence.
Parentheses sometimes create first-class lists in Python and Ruby, for example. They also sometimes group expressions and disambiguate precedence. If you want an arbitrary set of rules to memorize, look at the languages which conflate various and orthogonal uses of the same punctuation character.
"Parentheses sometimes create first-class lists in Python"
No, they never do. (don't know about ruby) Square brackets are for that. No problems with syntax this way.
"They also sometimes group expressions and disambiguate precedence"
But it's obvious: "expr ( [expr ,]* expr)" is a call - always. "(expr)" is for precedence. "([expr,]+)" is a tuple. Same as in 99% (made up number) of languages you encounter.
OTOH, in Perl, you've got the same expression that creates a list in one case, but not in the other, which is simply confusing. To be honest, I don't know of any other language that does it. You can call my expectations to be appropriate for a pastiche of whatever other language - yes - all the other languages I know / heard of, work the way I expected... and don't force me to learn rules that work based on context. Similarity between languages is a "good thing".
If you like that syntax, good for you. But I fully understand people who'd rather not be surprised this way. To me it doesn't make sense to be that different. I think Steve Yegge knew exactly what () do when he was writing his blog - he was simply complaining about that unexpected behaviour.
Your "obvious" rules are as arbitrary as those of any other language.
What is the difference between a tuple and a list that's "obvious" to a novice programmer? (Yes, you may claim that I change my argument to talk about lists versus tuples, but if you want to press on this line of thinking, Python's syntax for list and list-of-list declaration is the same as Perl's syntax for anonymous array declaration.)
Which parts of the requirement for a trailing comma after the first element of a single-element tuple are "obvious" to a novice programmer?
Which of those "obvious" rules are obvious cognates with other programming languages?
(What's "obvious" about Smalltalk having a strict left-to-right evaluation order, ignoring "obvious" mathematical precedence rules which schoolchildren learn?)
> ... in Perl, you've got the same expression that creates a list in one case, but not in the other...
This is still not true. The comma operator creates lists in Perl.
It does if you bother to learn the language, rather than assuming that it's a pastiche of whatever features you bothered to osmose from a smörgåsbord of whichever other languages you might have encountered.
> It just doesn't "make sense".
The notion that a programming language both can and should be completely intuitive to novices who don't have to bother to learn an arbitrary list of syntax rules is absurd on its face.
Parentheses never create first-class lists in Perl. They only ever group expressions and disambiguate precedence.
Parentheses sometimes create first-class lists in Python and Ruby, for example. They also sometimes group expressions and disambiguate precedence. If you want an arbitrary set of rules to memorize, look at the languages which conflate various and orthogonal uses of the same punctuation character.