diff options
author | Jesse Luehrs <doy@tozt.net> | 2010-11-16 01:34:21 -0600 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2010-11-16 01:34:21 -0600 |
commit | a5129e538980a4e414dffc8ded23c921642e2dea (patch) | |
tree | 11feedd27c4e446db40a3948dc7492bc0892b818 /lib | |
parent | e4afde02c9d7b7c2d1c031d18df418a166c0415f (diff) | |
download | package-stash-a5129e538980a4e414dffc8ded23c921642e2dea.tar.gz package-stash-a5129e538980a4e414dffc8ded23c921642e2dea.zip |
okay, working implementation selection
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Package/Stash.pm | 19 |
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}); } } |