X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FImport%2FInto.pm;h=3314ec347c0ea798ac3941969e94603e3ed8db09;hb=324e7017c37f3ba326a3c04af62067aa1d561f03;hp=b1daa5475b257ea3083351e0a16f086d41b70fa3;hpb=100742112f9d3aada7ea4be3053a99b09a7ef745;p=p5sagit%2FImport-Into.git diff --git a/lib/Import/Into.pm b/lib/Import/Into.pm index b1daa54..3314ec3 100644 --- a/lib/Import/Into.pm +++ b/lib/Import/Into.pm @@ -3,27 +3,26 @@ package Import::Into; use strict; use warnings FATAL => 'all'; -our $VERSION = '1.000003'; # 1.0.3 +our $VERSION = '1.001001'; # 1.1.1 -my %importers; - -sub _importer { +sub _prelude { my $target = shift; - \($importers{$target} ||= eval qq{ - package $target; - sub { my \$m = splice \@_, 1, 1; shift->\$m(\@_) }; - } or die "Couldn't build importer for $target: $@") + my ($package, $file, $line) + = $target =~ /[^0-9]/ ? ($target) : caller($target + 1); + qq{package $package;\n} + . ($file ? "#line $line \"$file\"\n" : '') } - sub import::into { my ($class, $target, @args) = @_; - $class->${_importer($target)}(import => @args); + eval _prelude($target) . '$class->import(@args); 1' + or die $@; } sub unimport::out_of { my ($class, $target, @args) = @_; - $class->${_importer($target)}(unimport => @args); + eval _prelude($target) . '$class->unimport(@args); 1' + or die $@; } 1; @@ -73,6 +72,7 @@ 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 } @@ -180,13 +180,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