in reply to order of strict and package

Pragma usage is lexical, so just by looking at the text of the code, you can determine where strict will apply or not. Since package is not a scope-closer (starting a new package, thus closing the old package, won't start a new lexical scope) the strict scope will run right over it.
use strict; package Strict::Package;
or
package Not::Strict::Yet::Package; use strict; # Now it's a strict package
are almost the same, provided there are no lines between the package and the use line in the second option. (The only difference being that the package declaration itself will not be subject to strict's strictness.) But bear in mind, since the scope of the declaration is lexical, if you declare the strict in another scope, it won't apply. (That is, if you declare strict in another block, loop, eval, file, or subroutine.)
{ use strict; package I::Think::I'm::Strict; } # But I'm really not
Overall, I would say that I would prefer the first one, but I don't think it makes much of a difference. The only reason why I go for the first option is that if I'm going to use strict, I like to say so right away, so I put that declaration right after the shebang. But even if you put it immediately inside the first package of the file, and then went on to define several more packages in that file, it would apply to all of the packages there, but not to the first package statement itself, if that mattered at all.