summaryrefslogtreecommitdiff
path: root/lib/Exporter.pm
diff options
context:
space:
mode:
authorAndy Dougherty <doughera@lafcol.lafayette.edu>1995-06-22 00:43:21 +0000
committerAndy Dougherty <doughera@lafcol.lafayette.edu>1995-06-22 00:43:21 +0000
commite50aee73b3d4c555c37e4b4a16694765fb16c887 (patch)
tree46b50fff5f53a49b55d0ff3f4e1816e427264375 /lib/Exporter.pm
parent4aa0a1f7324b8447469670a1b2427c3ac2428bae (diff)
downloadperl-e50aee73b3d4c555c37e4b4a16694765fb16c887.tar.gz
This is my patch patch.1m for perl5.001.
To apply, change to your perl directory, run the command above, then apply with patch -p1 -N < thispatch. Highlights of this patch include: 1. Fixes for $sitelib, $d_stdio_ptr_lval, and $d_stdio_cnt_lval when config.sh is re-used. 2. Move embed.h, keywords.h, and opcode.h dependencies to a special regen_headers target that is ordinarily not used. This is now analogous to the run_byacc target. As a cosmetic side-effect, I transliterated embed_h.sh into embed.pl so that it can run on non-unix systems as well. 3. Tests for gdbm_{sync,exists,setopt} in GDBM_File (needed for Slackware 2.1). For good measure, I've also thrown in the following patches I pulled off the list, mostly unmodified from the originals. 1. Larry's "unofficial official" fix for the subroutine array context problem. 2. Tim's __DATA__ patch. (I kept forgetting about this one.) 3. Malcom's USE_OP_MASK patch to pave the way for his Safe extension. 4. Spider's suggested renaming of regexec to pregexec and regcomp to pregcomp to avoid conflicts with POSIX symbols on Digital Unix. (I only added a brief explanatory comment to the relevant .c files.) 5. Spider's installperl patch to avoid installing *.orig and and the .exists files. (I changed this a little to include patch's ~ suffix, which is used on systems with short file names (in some versions of patch)). 6. Raphael's "safe_unlink" patch to installperl, in case a copy of perl is currently runniung. 7. xsubpp 1.9. 8. Tim's lib.pm module (with patched corrected spelling of 2nd :-). 9. Tim's Exporter module version patches. 10. Tim's MakeMaker patches for make test when LINKTYPE=static. 11. Randal's pod2html patches. 12. Spider's "picky compiler" patches for x2p/util.[ch] 13. Paul's updated source filtering patches. Patch and enjoy. I hope nothing breaks :-). Andy Dougherty doughera@lafcol.lafayette.edu Dept. of Physics Lafayette College, Easton PA 18042
Diffstat (limited to 'lib/Exporter.pm')
-rw-r--r--lib/Exporter.pm29
1 files changed, 28 insertions, 1 deletions
diff --git a/lib/Exporter.pm b/lib/Exporter.pm
index ca1ff3547c..0a7abc5286 100644
--- a/lib/Exporter.pm
+++ b/lib/Exporter.pm
@@ -36,6 +36,16 @@ Application says:
You can set C<$Exporter::Verbose=1;> to see how the specifications are
being processed and what is actually being imported into modules.
+=head2 Module Version Checking
+
+The Exporter module will convert an attempt to import a number from a
+module into a call to $module_name->require_version($value). This can
+be used to validate that the version of the module being used is
+greater than or equal to the required version.
+
+The Exporter module supplies a default require_version method which
+checks the value of $VERSION in the exporting module.
+
=cut
require 5.001;
@@ -111,7 +121,15 @@ sub export {
foreach $sym (@imports) {
if (!$exports{$sym}) {
- if ($sym !~ s/^&// || !$exports{$sym}) {
+ if ($sym =~ m/^\d/) {
+ $pkg->require_version($sym);
+ # If the version number was the only thing specified
+ # then we should act as if nothing was specified:
+ if (@imports == 1) {
+ @imports = @exports;
+ last;
+ }
+ } elsif ($sym !~ s/^&// || !$exports{$sym}) {
warn qq["$sym" is not exported by the $pkg module ],
"at $callfile line $callline\n";
$oops++;
@@ -152,4 +170,13 @@ sub export_tags {
map {$tags{$_} ? @{$tags{$_}} : $_} @_ ? @_ : keys %tags);
}
+sub require_version {
+ my($self, $wanted) = @_;
+ my $pkg = ref $self || $self;
+ my $version = ${"${pkg}::VERSION"} || "(undef)";
+ Carp::croak("$pkg $wanted required--this is only version $version")
+ if $version < $wanted;
+ $version;
+}
+
1;