Declaring a variable twice in the same scope is indeed an error...
my does two things. During compilation, it creates an association between a variable name and its appropriate lexical scope. During runtime, it initializes the appropriate storage for that variable.
The strict pragma only cares about the former; the documentation has long stated:
This generates a compile-time error if you access a variable that wasn't declared via "our" or "use vars", localized via "my()", or wasn't fully qualified.
While you may be right that strict should warn about double declaration, strict 'vars' only concerns itself with an idempotent operation. You can't create that compile-time association more than once in the same scope because that association is an either-or concern.
With that said, you can't unilaterally assume that all instances of the double-declaration have unintended runtime consequences. Those consequences are also well established and long understood. I can imagine code which does this deliberately.
That's not my particular style, but not everything I find confusing is (nor should it be) an error.
Improve your skills with Modern Perl: the free book.
In reply to Re^3: Help! My variables are jumping off a cliff!
by chromatic
in thread Help! My variables are jumping off a cliff!
by oko1
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |