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