By the way guys, string concatenation isn't . or + or a comma or something. It's a tilde: ~
'a' ~ 'b' to get 'ab'.
Because it looks like a "piece of string" ... that ties ... strings together, apparently.
By the way guys, string concatenation isn't . or + or a comma or something. It's a tilde: ~
'a' ~ 'b' to get 'ab'.
Because it looks like a "piece of string" ... that ties ... strings together, apparently.
If you read a little farther you might have seen this: Note: .VAR and .WHAT are code smells. They’re useful to understand the language and debug, but testing against what they return is nearly always the wrong approach.
> Because it looks like a "piece of string" ... that ties ... strings together, apparently.
You're mistaking a mnemonic for the reasoning. The reasoning is most likely because using a period for string concatenation is likely to cause problems when it's also used for method calls and strings can have methods, and when methods can be quotes. E.g. "foo"."chars"(), which might be useful with string interpolation.
As for why it's not +, that's covered as well. Perl takes the stance that operators should be different for different operation types. What does foo + bar mean in python? You need to know the types of foo and bar to know that. In Perl 5 and Perl 6, you know whether you are adding numeric types or concatenating (not adding) strings.
It's easy to assume no thought went into the development[1], but it's been very well thought out and been baking for a very long time. They spent that time actually testing their ideas, and making changes when reality didn't match expectations.
1: for that matter, a lot of people think that about Perl 5, which is untrue, it just has different design goals than many languages
1. Python helps you think more like the computer does. Perl helps the computer think more like you.
2. Modern Perl is C# for hippies.
JavaScript overloading + to mean addition and string concatenation was the worst decision ever given the use case of JS. 1 + '1' * 1 is not the same as '1' + 1 * 1 good job. That definitely wont be evil once the values are in a more complex equation with variables coming from some server side JSON string... at all. Definitely wont lead to any unusual bugs when something like the following happens 1 + '000001'. You might not notice 2 being 12 for a while but your customer will likely notice 2 suddenly becoming 1000001.
At least '~' joins two different string together when writing. Makes a lot more sense than '+' to me ~ Ulti 2015
I guarantee you, most people new to the language would be much more put-off by keeping perl5's -> for method calls. Perl lost that battle, it's over. They're making the best of it.
Also, any language with a self-reflective object system is going to show that off to beginners to help them explore, even if it wouldn't be used in production code much. That's like complaining about a language tutorial showing off the REPL to start out, even though you don't use it in production code.
To quote the conclusion of the article you linked:
> Why should you care? Because, I argue, that a fully expressive language is one that supports the delicate interplay between static and dynamic techniques. Languages that force only one perspective on you ... hobble you; languages that admit both modes of reasoning enable you and liberate you from the tyranny of a single type.
It would seem he ought to love Perl 6.
"Getting beyond static vs dynamic" may be of interest:
* HN discussion https://news.ycombinator.com/item?id=9089259
* Youtube: https://www.youtube.com/watch?v=id4pDstMu1s