{ my %used; # module => 1 if require ok, 0 otherwise my %disallowed; # for testing, refuses to _use modules in this hash sub _disallow_use { my( @modules)= @_; $disallowed{$_}= 1 foreach (@modules); } sub _allow_use { my( @modules)= @_; $disallowed{$_}= 0 foreach (@modules); } sub _use { my( $module, $version)= @_; $version ||= 0; if( $disallowed{$module}) { return 0; } if( $used{$module}) { return 1; } if( eval "require $module") { import $module; $used{$module}= 1; no strict 'refs'; if( ${"${module}::VERSION"} >= $version ) { return 1; } else { return 0; } } else { $used{$module}= 0; return 0; } } }