From ff581360d8d690879a1ece4e004acc1e3625f7dc Mon Sep 17 00:00:00 2001 From: Carlos Date: Sat, 29 Dec 2012 18:06:13 +0800 Subject: Replaces internal logic to select implementation with Module::Implementation --- lib/Package/Stash.pm | 35 ++++++++--------------------------- 1 file changed, 8 insertions(+), 27 deletions(-) (limited to 'lib/Package/Stash.pm') 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); -- cgit v1.2.3-54-g00ecf