It's a <i>bit</i> of a low blow on the author's part, as in perl, "+" is not "a generic addition operator that can be overloaded to concatenate strings", it is literally the "numeric addition operator" and both sides of the + will be coerced as needed to turn them into numbers. The default for strings is to parse them as numbers ("10" + "20" yields the number 30), and a string that doesn't start with a number defaults to zero.<p>If Perl does anything wrong here, it is in not throwing a type error at runtime but just silently coercing the number. Compare with Python:<p><pre><code>    Python 2.6.4 ... linux2
    Type "help", ...
    &#62;&#62;&#62; "30" + 2
    Traceback (most recent call last):
      File "&#60;stdin&#62;", line 1, in &#60;module&#62;
    TypeError: cannot concatenate 'str' and 'int' objects
</code></pre>
(Using "use overload" may let you do further crazy things with +; I'm just talking about the default definition of the operator.)<p>Incidentally, the string equivalent of + is ".", the dot. There's a parallel hierarchy of operators in Perl for numbers vs. strings, which is part of why Perl has so damned many operators. Woe betide the developer that says "==" instead of "eq" accidentally....