Of course, it always shines through when you have
But Perl still has one fault.... the bitwise operators. Which are bitwise numeric operators when either are numbers, but a bitwise string operator when both are strings. Which is pretty much the most useless operation ever, and the one you get almost all the time, since Perl numbers tend to be string internally when you get them from a user, database, etc.
So whenever you want to do a bitwise operation, your Perl looks like this:
my $bitwise = ($foo + 0) & ($bar + 0);
Just to cast those bitches internally into actual numbers and to be sure you're getting the right operator.
I can live with that in Perl. It's just one operator, and one you don't tend to use that often.
But in JavaScript it's a dozen times worse, since there are no "cmp", "lt", "gt", ".", etc operators for strings, so JavaScript is always guessing what the fuck operator you actually want.
Particularly bad is the "+" operator which either means concatenate or add, both common operations! So you end up sprinkling all your code with stuff like:
var sum = (foo - 0) + (bar - 0);
or:
var sum = (foo * 1) + (bar * 1);
What's worse, it seems that functions in the standard JavaScript library (Math.*, etc) are inconsistent between browsers with regard to shortcuts they take to return early, passing back copies of your original variable without the internal "I'm a string!" flag changed to "I'm a number!".
So it's possible to get back strings variables from Math functions sometimes? (???)
So frustrating, that you can't write a simple numeric algorithm that work in a bunch of browsers without "cleaning" your variables all over the place to make sure they're actually numbers.
I think some of this is fixed in JavaScript 2.0, albeit with a horrid syntax.
Update: had wrong Perl operator as example. brainfart. also s/polymorphic/overloaded/. i should know better.