The elegant dividend that Perl derives from its lack of operator ambiguity
Really? Can you describe what
&,
|,
++ and
<> do, without taking the value of their operands into account?
Yes, overloading + to mean either string concatenation or numeric addition is a language design blunder IMHO. I'm often saddened by how many language designers were seduced by this unfortunate misfeature.
I don't call it a misfeature. It's a design decision whether you allow multiple dispatch or not. There are pro and cons, and judgement should be made in context of the entire language. If your typing system is different, multiple dispatch makes more sense (perl6 will have multiple dispatch, although I don't know whether it will have it for build in operators). Perl5 doesn't have much of it, but do note the mentioned operators. And it allows operators to be overloaded. If I want to make
+ to concatenate strings, I can, quite simply:
use 5.010;
use overload '""' => sub {${$_[0]}},
'+' => sub {bless\do{my$o=${$_[$_[2]]}.$_[1-$_[2]]}};
BEGIN {overload::constant q => sub {bless \do {my $v = $_[0]}}}
my $x = "Hello";
my $y = "world";
my $z = "" + uc $x;
say $x + ", " + $y;
say $z + $z;
__END__
Hello, world
HELLOHELLO
(Implementation not complete)