Upgrade to CPAN-1.88_53.
[p5sagit/p5-mst-13.2.git] / lib / Exporter.pm
index a986fb3..2b860f3 100644 (file)
@@ -9,8 +9,10 @@ require 5.006;
 our $Debug = 0;
 our $ExportLevel = 0;
 our $Verbose ||= 0;
-our $VERSION = '5.566';
-$Carp::Internal{Exporter} = 1;
+our $VERSION = '5.59';
+our (%Cache);
+# Carp does this now for us, so we can finally live w/o Carp
+#$Carp::Internal{Exporter} = 1;
 
 sub as_heavy {
   require Exporter::Heavy;
@@ -29,11 +31,16 @@ sub import {
   my $pkg = shift;
   my $callpkg = caller($ExportLevel);
 
+  if ($pkg eq "Exporter" and @_ and $_[0] eq "import") {
+    *{$callpkg."::import"} = \&import;
+    return;
+  }
+
   # We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-(
-  my($exports, $export_cache, $fail)
-    = (\@{"$pkg\::EXPORT"}, \%{"$pkg\::EXPORT"}, \@{"$pkg\::EXPORT_FAIL"});
+  my($exports, $fail) = (\@{"$pkg\::EXPORT"}, \@{"$pkg\::EXPORT_FAIL"});
   return export $pkg, $callpkg, @_
     if $Verbose or $Debug or @$fail > 1;
+  my $export_cache = ($Cache{$pkg} ||= {});
   my $args = @_ or @_ = @$exports;
 
   local $_;
@@ -102,6 +109,12 @@ In module YourModule.pm:
   @ISA = qw(Exporter);
   @EXPORT_OK = qw(munge frobnicate);  # symbols to export on request
 
+or
+
+  package YourModule;
+  use Exporter 'import'; # gives you Exporter's import() method directly
+  @EXPORT_OK = qw(munge frobnicate);  # symbols to export on request
+
 In other files which wish to use YourModule:
 
   use ModuleName qw(frobnicate);      # import listed symbols
@@ -200,9 +213,9 @@ need to know to use Exporter.
 
 =head2 Specialised Import Lists
 
-If the first entry in an import list begins with !, : or / then the
-list is treated as a series of specifications which either add to or
-delete from the list of names to import. They are processed left to
+If any of the entries in an import list begins with !, : or / then
+the list is treated as a series of specifications which either add to
+or delete from the list of names to import. They are processed left to
 right. Specifications are in the form:
 
     [!]name         This name only
@@ -247,7 +260,7 @@ Exporter has a special method, 'export_to_level' which is used in situations
 where you can't directly call Exporter's import method. The export_to_level
 method looks like:
 
-MyPackage->export_to_level($where_to_export, $package, @what_to_export);
+    MyPackage->export_to_level($where_to_export, $package, @what_to_export);
 
 where $where_to_export is an integer telling how far up the calling stack
 to export your symbols, and @what_to_export is an array telling what
@@ -257,37 +270,49 @@ currently unused.
 For example, suppose that you have a module, A, which already has an
 import function:
 
-package A;
+    package A;
 
-@ISA = qw(Exporter);
-@EXPORT_OK = qw ($b);
+    @ISA = qw(Exporter);
+    @EXPORT_OK = qw ($b);
 
-sub import
-{
-    $A::b = 1;     # not a very useful import method
-}
+    sub import
+    {
+       $A::b = 1;     # not a very useful import method
+    }
 
 and you want to Export symbol $A::b back to the module that called 
 package A. Since Exporter relies on the import method to work, via 
 inheritance, as it stands Exporter::import() will never get called. 
 Instead, say the following:
 
-package A;
-@ISA = qw(Exporter);
-@EXPORT_OK = qw ($b);
+    package A;
+    @ISA = qw(Exporter);
+    @EXPORT_OK = qw ($b);
 
-sub import
-{
-    $A::b = 1;
-    A->export_to_level(1, @_);
-}
+    sub import
+    {
+       $A::b = 1;
+       A->export_to_level(1, @_);
+    }
 
 This will export the symbols one level 'above' the current package - ie: to 
 the program or module that used package A. 
 
-Note: Be careful not to modify '@_' at all before you call export_to_level
+Note: Be careful not to modify C<@_> at all before you call export_to_level
 - or people using your package will get very unexplained results!
 
+=head2 Exporting without inheriting from Exporter
+
+By including Exporter in your @ISA you inherit an Exporter's import() method
+but you also inherit several other helper methods which you probably don't
+want. To avoid this you can do
+
+  package YourModule;
+  use Exporter qw( import );
+
+which will export Exporter's own import() method into YourModule.
+Everything will work as before but you won't need to include Exporter in
+@YourModule::ISA.
 
 =head2 Module Version Checking