diff options
Diffstat (limited to 'lib/Net/OpenSSH/ModuleLoader.pm')
-rw-r--r-- | lib/Net/OpenSSH/ModuleLoader.pm | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/Net/OpenSSH/ModuleLoader.pm b/lib/Net/OpenSSH/ModuleLoader.pm new file mode 100644 index 0000000..149a517 --- /dev/null +++ b/lib/Net/OpenSSH/ModuleLoader.pm @@ -0,0 +1,35 @@ +package Net::OpenSSH::ModuleLoader; + +use strict; +use warnings; +use Carp; + +our %loaded_module; + +use Exporter qw(import); +our @EXPORT = qw(_load_module); + +sub _load_module { + my ($module, $version) = @_; + $loaded_module{$module} ||= do { + my $err; + do { + local ($@, $SIG{__DIE__}); + my $ok = eval "require $module; 1"; + $err = $@; + $ok; + } or croak "unable to load Perl module $module: $err"; + }; + if (defined $version) { + my $mv = do { + local ($@, $SIG{__DIE__}); + eval "\$${module}::VERSION"; + } || 0; + (my $mv1 = $mv) =~ s/_\d*$//; + croak "$module version $version required, $mv is available" + if $mv1 < $version; + } + 1 +} + +1; |