Are you saying that instead of distinguishing between foo and my foo, the distinction should be between everybody's foo and foo for some spelling of everybody's
As Nick points out, I've been feeding the flames when I should be doing other things. I'm going to try one last time to offer a word to the wise, and then shut up.
"use strict" alters the semantics of the scoping rules in a key point.
Without strict, my and local simply hide the name global scope for a name, which is handy, but leaves you susceptible to forgetting to scope a variable. Forgetting to scope a variable means you have unintended side-effects. That's a bad thing.
With strict, the interpreter complains if you use a variable without declaring its scope. Problem fixed, for most purposes, though not for all people.
Similarly with the argument passing argument. If prototypes are not sufficient, and if the explicit move from the argument array to local variables hides, rather than reveals, semantics for you, then perl gives you one more option in passing a hash instead of an array. Many find that option too verbose. Many find it far more explicit.
What you have is evidence that the language is evolving naturally. There's More Than One Way To Do It. Whether that's a good thing or a bad thing is another flame war, and I'm not interested. If pointing out that the warts have workarounds, and that the workarounds are not useless to some people is being too forgiving, well, I've lost interest in that,. too.
But if you learn perl strictly from things you see on the web, you get stuck thinking it does things only the wrong way. For further discussion, perlmonks and perl.org. I'm out of this one.
--
Joel Rees
Getting involved in the neighbor's family squabbles is dangerous.
But if the abusive partner has a habit of shooting through his/her roof,
the guy who lives upstairs is in a bit of a catch-22.