7 use vars qw(@ISA $VERSION $CLASS $STRICT $LAX *declare *qv);
13 local $SIG{'__DIE__'};
14 eval "use version::vxs $VERSION";
15 if ( $@ ) { # don't have the XS version installed
16 eval "use version::vpp $VERSION"; # don't tempt fate
18 push @ISA, "version::vpp";
20 *version::qv = \&version::vpp::qv;
21 *version::declare = \&version::vpp::declare;
22 *version::_VERSION = \&version::vpp::_VERSION;
23 *version::vcmp = \&version::vpp::vcmp;
24 *version::new = \&version::vpp::new;
27 *version::stringify = \&version::vpp::stringify;
28 *{'version::(""'} = \&version::vpp::stringify;
29 *{'version::(<=>'} = \&version::vpp::vcmp;
30 *version::parse = \&version::vpp::parse;
32 *version::is_strict = \&version::vpp::is_strict;
33 *version::is_lax = \&version::vpp::is_lax;
35 else { # use XS module
36 push @ISA, "version::vxs";
38 *version::declare = \&version::vxs::declare;
39 *version::qv = \&version::vxs::qv;
40 *version::_VERSION = \&version::vxs::_VERSION;
41 *version::vcmp = \&version::vxs::VCMP;
42 *version::new = \&version::vxs::new;
45 *version::stringify = \&version::vxs::stringify;
46 *{'version::(""'} = \&version::vxs::stringify;
47 *{'version::(<=>'} = \&version::vxs::VCMP;
48 *version::parse = \&version::vxs::parse;
50 *version::is_strict = \&version::vxs::is_strict;
51 *version::is_lax = \&version::vxs::is_lax;
59 # Set up any derived class
60 unless ($class eq $CLASS) {
62 *{$class.'::declare'} = \&{$CLASS.'::declare'};
63 *{$class.'::qv'} = \&{$CLASS.'::qv'};
67 if (@_) { # any remaining terms are arguments
68 map { $args{$_} = 1 } @_
70 else { # no parameters at all on use line
74 'UNIVERSAL::VERSION' => 1,
78 my $callpkg = caller();
80 if (exists($args{declare})) {
81 *{$callpkg.'::declare'} =
82 sub {return $class->declare(shift) }
83 unless defined(&{$callpkg.'::declare'});
86 if (exists($args{qv})) {
88 sub {return $class->qv(shift) }
89 unless defined(&{$callpkg.'::qv'});
92 if (exists($args{'UNIVERSAL::VERSION'})) {
95 = \&{$CLASS.'::_VERSION'};
98 if (exists($args{'VERSION'})) {
99 *{$callpkg.'::VERSION'} = \&{$CLASS.'::_VERSION'};
102 if (exists($args{'is_strict'})) {
103 *{$callpkg.'::is_strict'} = \&{$CLASS.'::is_strict'}
104 unless defined(&{$callpkg.'::is_strict'});
107 if (exists($args{'is_lax'})) {
108 *{$callpkg.'::is_lax'} = \&{$CLASS.'::is_lax'}
109 unless defined(&{$callpkg.'::is_lax'});