File Coverage

blib/lib/Net/OpenSSH/ModuleLoader.pm
Criterion Covered Total %
statement 22 25 88.0
branch 2 6 33.3
condition 2 5 40.0
subroutine 5 5 100.0
pod n/a
total 31 41 75.6


line stmt bran cond sub pod time code
1             package Net::OpenSSH::ModuleLoader;
2              
3 7     7   46 use strict;
  7         14  
  7         201  
4 7     7   30 use warnings;
  7         17  
  7         157  
5 7     7   64 use Carp;
  7         18  
  7         491  
6              
7             our %loaded_module;
8              
9 7     7   60 use Exporter qw(import);
  7         16  
  7         2220  
10             our @EXPORT = qw(_load_module);
11              
12             sub _load_module {
13 6     6   85 my ($module, $version) = @_;
14 6   66     107 $loaded_module{$module} ||= do {
15 4         9 my $err;
16 4 50       23 do {
17 4         33 local ($@, $SIG{__DIE__});
18 4         491 my $ok = eval "require $module; 1";
19 4         17 $err = $@;
20 4         43 $ok;
21             } or croak "unable to load Perl module $module: $err";
22             };
23 6 50       38 if (defined $version) {
24 0   0     0 my $mv = do {
25             local ($@, $SIG{__DIE__});
26             eval "\$${module}::VERSION";
27             } || 0;
28 0         0 (my $mv1 = $mv) =~ s/_\d*$//;
29 0 0       0 croak "$module version $version required, $mv is available"
30             if $mv1 < $version;
31             }
32             1
33 6         19 }
34              
35             1;