summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2013-07-10 17:11:20 -0400
committerJesse Luehrs <doy@tozt.net>2013-07-10 17:11:20 -0400
commit5c9420df616f091d317fda0c0fce38359f736da6 (patch)
tree438df66d6f96b66a79c35d6618416cecb7023748
parent51601b722cbd7c582f5ed2e163ed12b3d5cfb527 (diff)
downloadexporter-lexical-5c9420df616f091d317fda0c0fce38359f736da6.tar.gz
exporter-lexical-5c9420df616f091d317fda0c0fce38359f736da6.zip
allow just building the exporter without installing it
-rw-r--r--lib/Exporter/Lexical.pm21
-rw-r--r--t/build_exporter.t17
-rw-r--r--t/lib/Bar.pm20
3 files changed, 51 insertions, 7 deletions
diff --git a/lib/Exporter/Lexical.pm b/lib/Exporter/Lexical.pm
index 0a1ea5a..633da52 100644
--- a/lib/Exporter/Lexical.pm
+++ b/lib/Exporter/Lexical.pm
@@ -47,12 +47,24 @@ sub import {
my $caller = caller;
- my $import = sub {
+ my $import = build_exporter(\%opts, $caller);
+
+ {
+ no strict 'refs';
+ *{ $caller . '::import' } = $import;
+ }
+}
+
+sub build_exporter {
+ my ($opts, $caller) = @_;
+ $caller //= caller;
+
+ return sub {
my $caller_stash = do {
no strict 'refs';
\%{ $caller . '::' };
};
- my @exports = @{ $opts{'-exports'} };
+ my @exports = @{ $opts->{'-exports'} };
my %exports = map { $_ => \&{ $caller_stash->{$_} } } @exports;
for my $export (keys %exports) {
@@ -65,11 +77,6 @@ sub import {
# for now by injecting a dummy statement right after the 'use'.
_lex_stuff(";1;");
};
-
- {
- no strict 'refs';
- *{ $caller . '::import' } = $import;
- }
}
=head1 BUGS
diff --git a/t/build_exporter.t b/t/build_exporter.t
new file mode 100644
index 0000000..621e2aa
--- /dev/null
+++ b/t/build_exporter.t
@@ -0,0 +1,17 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use Test::More;
+use lib 't/lib';
+
+sub bar { 'bar' }
+
+is(bar(), "bar");
+{
+ use Bar;
+ is(bar(), "BAR");
+ is($Bar::imported, 1);
+}
+is(bar(), "bar");
+
+done_testing;
diff --git a/t/lib/Bar.pm b/t/lib/Bar.pm
new file mode 100644
index 0000000..69aadf9
--- /dev/null
+++ b/t/lib/Bar.pm
@@ -0,0 +1,20 @@
+package Bar;
+use strict;
+use warnings;
+
+use Exporter::Lexical ();
+
+our $imported;
+
+my $import = Exporter::Lexical::build_exporter({
+ -exports => [ qw(bar) ],
+});
+
+sub import {
+ $imported = 1;
+ goto $import;
+}
+
+sub bar { "BAR" }
+
+1;