X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FImport%2FInto.pm;h=a9f4a6cfdc9013e2a19bc71cfecb6965a8b3a8c3;hb=5f5f09b18af4987858e59a00204ceb49ff6f8ed0;hp=37fdddd331d389b2e43d11940a32584a5dfb2563;hpb=8e75fe00f864fd1c81cba6bf3d61a6840c8c743b;p=p5sagit%2FImport-Into.git diff --git a/lib/Import/Into.pm b/lib/Import/Into.pm index 37fdddd..a9f4a6c 100644 --- a/lib/Import/Into.pm +++ b/lib/Import/Into.pm @@ -3,18 +3,30 @@ package Import::Into; use strict; use warnings FATAL => 'all'; -our $VERSION = '1.000003'; # 1.0.3 +our $VERSION = '1.001001'; # 1.1.1 + +sub _prelude { + my $target = shift; + my ($package, $file, $line) + = $target =~ /[^0-9]/ ? ($target) : caller($target + 2); + qq{package $package;\n} + . ($file ? "#line $line \"$file\"\n" : '') +} -my %importers; +sub _make_action { + my ($action, $target) = @_; + eval _prelude($target).qq{sub { shift->$action(\@_) }} + or die "Failed to build action sub to ${action} for ${target}: $@"; +} sub import::into { my ($class, $target, @args) = @_; - $class->${\( - $importers{$target} ||= eval qq{ - package $target; - sub { shift->import(\@_) }; - } or die "Couldn't build importer for $target: $@" - )}(@args); + _make_action(import => $target)->($class, @args); +} + +sub unimport::out_of { + my ($class, $target, @args) = @_; + _make_action(unimport => $target)->($class, @args); } 1; @@ -61,6 +73,14 @@ C on it. This is a global method, and is callable on any package (and in fact on any object as well, although it's rarer that you'd want to do that). +Finally, we also provide an C to allow the exporting of the +effect of C: + + # unimport::out_of was added in 1.1.0 (1.001000) + sub unimport { + Moose->unimport::out_of(scalar caller); # no MyThing == no Moose + } + If how and why this all works is of interest to you, please read on to the description immediately below. @@ -164,13 +184,19 @@ you're receiving this from a parameter, I recommend using L: And that's it. +=head1 ACKNOWLEDGEMENTS + +Thanks to Getty for asking "how can I get C<< use strict; use warnings; >> +turned on for all consumers of my code?" and then "why is this not a +module?!". + =head1 AUTHOR mst - Matt S. Trout (cpan:MSTROUT) =head1 CONTRIBUTORS -None yet - maybe this software is perfect! (ahahahahahahahahaha) +haarg - Graham Knop (cpan:HAARG) =head1 COPYRIGHT