diff options
author | Carlos <carlos@multi> | 2012-12-29 18:06:13 +0800 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2013-01-03 21:33:06 -0600 |
commit | ff581360d8d690879a1ece4e004acc1e3625f7dc (patch) | |
tree | a44dae38b4bedc18047f74e17943b5cf4a6747c4 /lib/Package/Stash.pm | |
parent | 386514ec675d3879c28b3f1164974b049c552a5e (diff) | |
download | package-stash-ff581360d8d690879a1ece4e004acc1e3625f7dc.tar.gz package-stash-ff581360d8d690879a1ece4e004acc1e3625f7dc.zip |
Replaces internal logic to select implementation with Module::Implementation
Diffstat (limited to 'lib/Package/Stash.pm')
-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); |