You actually discovered the fact that, "use strict" has a per lexical body scope (and your package is just one type of lexical body). Try this piece of code:
@a = (1,2);
print join(",",@a);
{
use strict;
@b = (1,2);
print join(",",@b);
}
Perl would tell you that @b requires a package name, but it does not complain about @a, because "use strict" is only specified for that {} scope.
This actually makes sense. For example, you get a package from another person, and he didn't "use strict" in his package. Now you use his package in your package, and you specify "use strict". If this "use strict" is not per lexical body scope, but affects the whole script(remember his package is inside your script scope now.), Perl will probably refuse to run your script, because of all those problems in his package caused by your "use strict".
I remember we had a thread a while ago, about the fact that, "use encoding" has a per script scope, instead of a per lexical body scope. You may want to compare those two different types of scopes. I have
a node on that topic.