summaryrefslogtreecommitdiff
path: root/lib/Net/OpenSSH/ModuleLoader.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Net/OpenSSH/ModuleLoader.pm')
-rw-r--r--lib/Net/OpenSSH/ModuleLoader.pm35
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;