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


in reply to strict/warnings interference with global declarations

You need to declare the variable with our in file2.pm as well. Note that if file2.pm had a package statement, that would cause an additional problem. But since your example doesn't, I won't cloud the issue further. :-)

Update: if you're looking for a bit more explanation, then you should know that our does not actually create a global variable, because that doesn't need to be done.

Package variables can be used at any time, they don't need to be declared at all. You can get access without our by fully-qualifying the package name, e.g. $main::var or $::var (which is just shorthand for the same thing). When you use our, it merely creates an alias to the package variable, so you don't have to fully qualify it. But that alias is not global, it is lexically scoped. Since file boundaries create new lexical scopes, the alias is not available from file2.pm.