namification
[p5sagit/Package-Variant.git] / lib / Package / Variant.pm
index 977f76c..87c0d74 100644 (file)
@@ -3,6 +3,10 @@ package Package::Variant;
 use strictures 1;
 use Carp qw( croak );
 
+our $VERSION = '1.000000'; # 1.0.0
+
+$VERSION = eval $VERSION;
+
 our %Variable;
 
 my $sanitize_importing = sub {
@@ -43,6 +47,10 @@ my $sanitize_importing = sub {
   return \@imports;
 };
 
+my $sub_namer = eval {
+  require Sub::Name; sub { shift if @_ > 2; Sub::Name::subname(@_) }
+} || sub { $_[-1] };
+
 sub import {
   my $target = caller;
   my $me = shift;
@@ -104,9 +112,12 @@ sub build_variant_of {
   my $subs = $Variable{$variable}{subs};
   local @{$subs}{keys %$subs} = map $variant_name->can($_), keys %$subs;
   local $Variable{$variable}{install} = sub {
-    my ($name, $ref) = @_;
+    my $full_name = "${variant_name}::".shift;
+
+    my $ref = $sub_namer->($full_name, @_);
+    
     no strict 'refs';
-    *{"${variant_name}::${name}"} = $ref;
+    *$full_name = $ref;
   };
   $variable->make_variant($variant_name, @args);
   return $variant_name;
@@ -275,6 +286,11 @@ arguments as a flat array reference:
 The import method will be called even if the list of import arguments is
 empty or not specified,
 
+If you just want to import a single package's default exports, you can
+also pass a string instead:
+
+  use PAckage::Variant importing => 'Package';
+
 =head2 subs
 
 An array reference of strings listing the names of subroutines that should
@@ -359,15 +375,16 @@ method.
 
 =head1 AUTHOR
 
-=over
+mst - Matt S. Trout (cpan:MSTROUT) <mst@shadowcat.co.uk>
 
-=item mst - Matt S. Trout (cpan:MSTROUT) <mst@shadowcat.co.uk>
+=head1 CONTRIBUTORS
 
-=back
+phaylon - Robert Sedlacek (cpan:PHAYLON) <r.sedlacek@shadowcat.co.uk>
 
 =head1 COPYRIGHT
 
-Copyright (c) 2010-2011 the C<Package::Stash> L</AUTHOR> as listed above.
+Copyright (c) 2010-2011 the C<Package::Variant> L</AUTHOR> and
+L</CONTRIBUTORS> as listed above.
 
 =head1 LICENSE