summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2010-11-16 01:34:21 -0600
committerJesse Luehrs <doy@tozt.net>2010-11-16 01:34:21 -0600
commita5129e538980a4e414dffc8ded23c921642e2dea (patch)
tree11feedd27c4e446db40a3948dc7492bc0892b818 /lib
parente4afde02c9d7b7c2d1c031d18df418a166c0415f (diff)
downloadpackage-stash-a5129e538980a4e414dffc8ded23c921642e2dea.tar.gz
package-stash-a5129e538980a4e414dffc8ded23c921642e2dea.zip
okay, working implementation selection
Diffstat (limited to 'lib')
-rw-r--r--lib/Package/Stash.pm19
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/Package/Stash.pm b/lib/Package/Stash.pm
index b00630f..22369a5 100644
--- a/lib/Package/Stash.pm
+++ b/lib/Package/Stash.pm
@@ -6,25 +6,31 @@ use warnings;
our $IMPLEMENTATION;
BEGIN {
- #warn "loading Package::Stash";
$IMPLEMENTATION = $ENV{PACKAGE_STASH_IMPLEMENTATION}
if exists $ENV{PACKAGE_STASH_IMPLEMENTATION};
- #warn "found $IMPLEMENTATION" if $IMPLEMENTATION;
- if (!$IMPLEMENTATION) {
- #warn "detecting...";
+ my $err;
+ if ($IMPLEMENTATION) {
+ if (!eval "require Package::Stash::$IMPLEMENTATION; 1") {
+ require Carp;
+ Carp::croak("Could not load Package::Stash::$IMPLEMENTATION: $@");
+ }
+ }
+ else {
for my $impl ('XS', 'PP') {
if (eval "require Package::Stash::$impl; 1;") {
- #warn "found $impl";
$IMPLEMENTATION = $impl;
last;
}
+ else {
+ $err .= $@;
+ }
}
}
if (!$IMPLEMENTATION) {
require Carp;
- Carp::croak("Could not find a suitable Package::Stash implementation");
+ Carp::croak("Could not find a suitable Package::Stash implementation: $err");
}
my $impl = "Package::Stash::$IMPLEMENTATION";
@@ -32,7 +38,6 @@ BEGIN {
my $to = $impl->new(__PACKAGE__);
my $methods = $from->get_all_symbols('CODE');
for my $meth (keys %$methods) {
- #warn "installing $meth";
$to->add_symbol("&$meth" => $methods->{$meth});
}
}