http://www.perlmonks.org?node_id=729032


in reply to Little annoying mistakes ... of others

Peter Scott suggested on Perl 5 Porters to warn if a user tries to declare my @ARGV as currently it just silently hides the real @ARGV.

There are some more issues in that thread on the mailing list.

Replies are listed 'Best First'.
Re: my @ARGV
by ikegami (Pope) on Dec 08, 2008 at 21:12 UTC
    So does my $_; and my $var;. Is there a case where my doesn't create a new variable?
      my $_ is new with 5.10.0, and switches anything in the scope that by default is using the global $_ to using the lexical $_ instead.

      my @ARGV has no such magic. readline or eof will continue to default to using the global @ARGV, even though there's a lexical @ARGV in scope. This is the reason for a warning.

        My point is that I am looking for cases of Perl code that compile under use strict. Don't generate warnings under use warnings but don't do the expected by a beginner.

        After being told to use strict and declare everything with my, a beginner will go out and do just that. Declare everything with my:

        my (@ARGV, $a, $b, $_, $AUTOLOAD);
        you could give them a list of special cases but IMHO it is a waste of brain cycles - at that point in the learning curve. Probably they will not learn them and the whole thing will just confuse them.

        My plan is to provide a tool that can find such cases and warn about them.