summaryrefslogtreecommitdiffstats
path: root/lib/Package/Stash.pm
diff options
context:
space:
mode:
authorCarlos <carlos@multi>2012-12-29 18:06:13 +0800
committerJesse Luehrs <doy@tozt.net>2013-01-03 21:33:06 -0600
commitff581360d8d690879a1ece4e004acc1e3625f7dc (patch)
treea44dae38b4bedc18047f74e17943b5cf4a6747c4 /lib/Package/Stash.pm
parent386514ec675d3879c28b3f1164974b049c552a5e (diff)
downloadpackage-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.pm35
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);