This is because of how perl requires & uses. Consider this code:
package Foo;
use thing_to_use;
...
package Bar;
use thing_to_use;
...
When this code executes, in package Foo, thing_to_use is included, and the stuff in thing_to_use is put into the namespace Foo.
Then in package Bar, thing_to_use is specified to be used again, but since perl has already used thing_to_use, it skips over that use line. (otherwise circular references would keep parsing forever - among other issues).
So when you try to use something from thing_to_use in package Bar, it doesnt work right because the functions, etc in thing_to_use were put into the Foo namespace. If you fully qualified that in package Bar it would work in this instance, but not in general, because other programs might not import thing_to_use into package Foo, but some other package that asked for it first.
The solution would be something like this:
use thing_to_use;
package Foo;
...
And then in your code for Bar:
use Bar;
package Bar;
...
This way, thing_to_use is imported into main. But, you'll have to qualify calls into thing_to_use with main:: in both Foo and Bar.