... use Config qw(getConfig); ... my $foo = getConfig('bar'); ... #### package Config; my $initialised = 0; sub _initialise { return if $initialised; ... # read config file $initialised++; } _initialise(); sub getConfig{...} ... 1; #### package Config; our $initialised = 0; sub _initialise { ... # as before } BEGIN { _initialise(); } ... 1; #### ... use_ok('Config'); is($Config::initialised, 1); # initialisation completed OK #### t/Config....Name "Config::var" used only once: possible typo at t/Config.t line 9. # Failed test (t/Config.t at line 9) # got: '0' # expected: '1' # Looks like you failed 1 tests of 2. t/Config....dubious Test returned status 1 (wstat 256, 0x100) DIED. FAILED test 2 Failed 1/2 tests, 50.00% okay Failed Test Stat Wstat Total Fail Failed List of Failed ------------------------------------------------------------------------------- t/Config.t 1 256 2 1 50.00% 2 Failed 1/1 test scripts, 0.00% okay. 1/2 subtests failed, 50.00% okay. make: *** [test_dynamic] Error 2 #### package Config; sub _initialise { ... # as before } BEGIN { our $initialised = 0; _initialise(); } 1;