diff options
Diffstat (limited to 'lib/Package')
-rw-r--r-- | lib/Package/Stash.pm | 35 |
1 files changed, 8 insertions, 27 deletions
diff --git a/lib/Package/Stash.pm b/lib/Package/Stash.pm index 08a5e13..8a3fa9f 100644 --- a/lib/Package/Stash.pm +++ b/lib/Package/Stash.pm @@ -6,35 +6,16 @@ use 5.008001; our $IMPLEMENTATION; +use Module::Implementation; + BEGIN { - $IMPLEMENTATION = $ENV{PACKAGE_STASH_IMPLEMENTATION} - if exists $ENV{PACKAGE_STASH_IMPLEMENTATION}; - - my $err; - if ($IMPLEMENTATION) { - my $file = "Package::Stash::$IMPLEMENTATION.pm"; - $file =~ s{::}{/}g; - if (!eval 'require($file) ; 1') { - require Carp; - Carp::croak("Could not load Package::Stash::$IMPLEMENTATION: $@"); - } - } - else { - for my $impl ('XS', 'PP') { - if (eval "require Package::Stash::$impl; 1;") { - $IMPLEMENTATION = $impl; - last; - } - else { - $err .= $@; - } - } - } + local $ENV{PACKAGE_STASH_IMPLEMENTATION} = $IMPLEMENTATION + if ( $IMPLEMENTATION and not $ENV{PACKAGE_STASH_IMPLEMENTATION} ); - if (!$IMPLEMENTATION) { - require Carp; - Carp::croak("Could not find a suitable Package::Stash implementation: $err"); - } + Module::Implementation::build_loader_sub( + implementations => [ 'XS', 'PP' ] + )->(); + $IMPLEMENTATION = Module::Implementation::implementation_for(__PACKAGE__); my $impl = "Package::Stash::$IMPLEMENTATION"; my $from = $impl->new($impl); |