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   40 use strict;
  7         13  
  7         161  
4 7     7   28 use warnings;
  7         12  
  7         197  
5 7     7   28 use Carp;
  7         11  
  7         402  
6              
7             our %loaded_module;
8              
9 7     7   58 use Exporter qw(import);
  7         13  
  7         1670  
10             our @EXPORT = qw(_load_module);
11              
12             sub _load_module {
13 6     6   74 my ($module, $version) = @_;
14 6   66     74 $loaded_module{$module} ||= do {
15 4         15 my $err;
16 4 50       85 do {
17 4         64 local ($@, $SIG{__DIE__});
18 4         410 my $ok = eval "require $module; 1";
19 4         20 $err = $@;
20 4         32 $ok;
21             } or croak "unable to load Perl module $module: $err";
22             };
23 6 50       16 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         16 }
34              
35             1;