in reply to our scope and packages

I'd suggest using Exporter:

# Module1.pm package Module1; our %variable; use base 'Exporter'; our @EXPORT_OK = qw(%variable); %variable = ( foo => "foo" ); # Module2.pm package Module2; use Module1 qw(%variable); print $variable{foo};

However, if you plan to use this variable to exchange data between the modules, I'd suggest using subroutine arguments instead.