diff options
author | Fergal Daly <fergal@esatclear.ie> | 2003-11-10 00:08:52 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2003-11-28 20:42:45 +0000 |
commit | fe43f860c5d2e34a3ae8a9320e2ba4f6b396ff1e (patch) | |
tree | f8aefac2e5e76fc2397a6fcf513b44a36df6e090 /lib/Exporter.pm | |
parent | ac7b122df953c27d4beccf03efed78ec25b8f64d (diff) | |
download | perl-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.pm | 27 |
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 |