summaryrefslogtreecommitdiffstats
path: root/lib/Sub/Exporter/Declare.pm
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-06-14 12:29:51 -0500
committerJesse Luehrs <doy@tozt.net>2011-06-14 12:29:51 -0500
commit6e242023eb97405f9a0a283c07e9d6a64c6a3b21 (patch)
tree55423eaf7e1cab3a03ca040512830d759de0c84f /lib/Sub/Exporter/Declare.pm
parent3edca453f642917f53c6fbfa59683fd70204813d (diff)
downloadsub-exporter-declare-6e242023eb97405f9a0a283c07e9d6a64c6a3b21.tar.gz
sub-exporter-declare-6e242023eb97405f9a0a283c07e9d6a64c6a3b21.zip
rename to Sub::Exporter::DeclareHEADmaster
Diffstat (limited to 'lib/Sub/Exporter/Declare.pm')
-rw-r--r--lib/Sub/Exporter/Declare.pm38
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/Sub/Exporter/Declare.pm b/lib/Sub/Exporter/Declare.pm
new file mode 100644
index 0000000..9f20149
--- /dev/null
+++ b/lib/Sub/Exporter/Declare.pm
@@ -0,0 +1,38 @@
+package Sub::Exporter::Declare;
+use strict;
+use warnings;
+
+my %EXPORT_DATA;
+
+use Sub::Exporter 'build_exporter', -setup => {
+ exports => [qw(export export_default), import => \&import_generator],
+ groups => {
+ default => [qw(export export_default import)],
+ },
+};
+
+sub export {
+ my @exports = @_;
+ my $caller = caller;
+ $EXPORT_DATA{$caller} ||= {};
+ push @{ $EXPORT_DATA{$caller}->{exports} ||= [] }, @exports;
+}
+
+sub export_default {
+ my @exports = @_;
+ my $caller = caller;
+ $EXPORT_DATA{$caller} ||= {};
+ push @{ $EXPORT_DATA{$caller}->{exports} ||= [] }, @exports;
+ push @{ $EXPORT_DATA{$caller}->{groups}{default} ||= [] }, @exports;
+}
+
+sub import_generator {
+ my ($class, $name, $arg, $col) = @_;
+ return sub {
+ my ($package) = @_;
+ my $import = build_exporter($EXPORT_DATA{$package});
+ goto $import;
+ };
+}
+
+1;