If you're using strict, you need to declare the package name as well (and it's probably best to if your code's big enough to suggest splitting :)
# file one
use File2;
File2::setup();
main();
# or ::main() (this package) or main::main() very specific
# "default" package name for main script (the one requiring other file
+s) is 'main'
# print var foo from package File2
print $File2::foo . "\n";
sub main {
print "I am in the main subroutine.\n";
}
# file 2
package File2;
sub setup {
print "Setting up.\n";
}
$::foo = 'bar';
# or define explicitely
$File2::foo = 'bar';
1; # use'd files have to return true!