#Value.pm (no package declaration) sub getValue { ... } 1; #MainModule.pm package MainModule { use ExtraModule; ExtraModule::doSomething(); require Value; $x = 'getValue'; &$x(); #does not work at all } #ExtraModule.pm package ExtraModule { sub doSomething() { require Value; $x = 'getValue'; &$x(); #works fine } }