summaryrefslogtreecommitdiff
path: root/lib/Exporter.pm
diff options
context:
space:
mode:
authorFergal Daly <fergal@esatclear.ie>2003-11-10 00:08:52 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2003-11-28 20:42:45 +0000
commitfe43f860c5d2e34a3ae8a9320e2ba4f6b396ff1e (patch)
treef8aefac2e5e76fc2397a6fcf513b44a36df6e090 /lib/Exporter.pm
parentac7b122df953c27d4beccf03efed78ec25b8f64d (diff)
downloadperl-fe43f860c5d2e34a3ae8a9320e2ba4f6b396ff1e.tar.gz
Implement C<use Exporter 'import'> :
Subject: Re: [PATCH] Exporter-related PODs Message-Id: <200311100008.52639.fergal@esatclear.ie> (tweaked, so the imported import() doesn't spit out warnings) p4raw-id: //depot/perl@21798
Diffstat (limited to 'lib/Exporter.pm')
-rw-r--r--lib/Exporter.pm27
1 files changed, 25 insertions, 2 deletions
diff --git a/lib/Exporter.pm b/lib/Exporter.pm
index 753ea6aab2..176f6b8a98 100644
--- a/lib/Exporter.pm
+++ b/lib/Exporter.pm
@@ -9,7 +9,7 @@ require 5.006;
our $Debug = 0;
our $ExportLevel = 0;
our $Verbose ||= 0;
-our $VERSION = '5.567';
+our $VERSION = '5.57';
our (%Cache);
$Carp::Internal{Exporter} = 1;
@@ -30,6 +30,11 @@ 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, $fail) = (\@{"$pkg\::EXPORT"}, \@{"$pkg\::EXPORT_FAIL"});
return export $pkg, $callpkg, @_
@@ -103,6 +108,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
@@ -286,9 +297,21 @@ Instead, say the following:
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