This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Synch cpan/version/* and other files with CPAN version 0.9921.
[perl5.git] / cpan / version / lib / version.pm
1 #!perl -w
2 package version;
3
4 use 5.006002;
5 use strict;
6 use warnings::register;
7 if ($] >= 5.015) {
8     warnings::register_categories(qw/version/);
9 }
10
11 use vars qw(@ISA $VERSION $CLASS $STRICT $LAX *declare *qv);
12
13 $VERSION = 0.9921;
14 $CLASS = 'version';
15
16 # avoid using Exporter
17 require version::regex;
18 *version::is_lax = \&version::regex::is_lax;
19 *version::is_strict = \&version::regex::is_strict;
20 *LAX = \$version::regex::LAX;
21 *LAX_DECIMAL_VERSION = \$version::regex::LAX_DECIMAL_VERSION;
22 *LAX_DOTTED_DECIMAL_VERSION = \$version::regex::LAX_DOTTED_DECIMAL_VERSION;
23 *STRICT = \$version::regex::STRICT;
24 *STRICT_DECIMAL_VERSION = \$version::regex::STRICT_DECIMAL_VERSION;
25 *STRICT_DOTTED_DECIMAL_VERSION = \$version::regex::STRICT_DOTTED_DECIMAL_VERSION;
26
27 sub import {
28     no strict 'refs';
29     my ($class) = shift;
30
31     # Set up any derived class
32     unless ($class eq $CLASS) {
33         local $^W;
34         *{$class.'::declare'} =  \&{$CLASS.'::declare'};
35         *{$class.'::qv'} = \&{$CLASS.'::qv'};
36     }
37
38     my %args;
39     if (@_) { # any remaining terms are arguments
40         map { $args{$_} = 1 } @_
41     }
42     else { # no parameters at all on use line
43         %args =
44         (
45             qv => 1,
46             'UNIVERSAL::VERSION' => 1,
47         );
48     }
49
50     my $callpkg = caller();
51
52     if (exists($args{declare})) {
53         *{$callpkg.'::declare'} =
54             sub {return $class->declare(shift) }
55           unless defined(&{$callpkg.'::declare'});
56     }
57
58     if (exists($args{qv})) {
59         *{$callpkg.'::qv'} =
60             sub {return $class->qv(shift) }
61           unless defined(&{$callpkg.'::qv'});
62     }
63
64     if (exists($args{'UNIVERSAL::VERSION'})) {
65         local $^W;
66         *UNIVERSAL::VERSION
67                 = \&{$CLASS.'::_VERSION'};
68     }
69
70     if (exists($args{'VERSION'})) {
71         *{$callpkg.'::VERSION'} = \&{$CLASS.'::_VERSION'};
72     }
73
74     if (exists($args{'is_strict'})) {
75         *{$callpkg.'::is_strict'} = \&{$CLASS.'::is_strict'}
76           unless defined(&{$callpkg.'::is_strict'});
77     }
78
79     if (exists($args{'is_lax'})) {
80         *{$callpkg.'::is_lax'} = \&{$CLASS.'::is_lax'}
81           unless defined(&{$callpkg.'::is_lax'});
82     }
83 }
84
85
86 1;