xref: /openbsd-src/gnu/usr.bin/perl/cpan/version/lib/version.pm (revision 3d61058aa5c692477b6d18acfbbdb653a9930ff9)
16fb12b70Safresh1#!perl -w
26fb12b70Safresh1package version;
36fb12b70Safresh1
46fb12b70Safresh1use 5.006002;
56fb12b70Safresh1use strict;
6b8851fccSafresh1use warnings::register;
7b8851fccSafresh1if ($] >= 5.015) {
8b8851fccSafresh1    warnings::register_categories(qw/version/);
9b8851fccSafresh1}
106fb12b70Safresh1
11*3d61058aSafresh1our $VERSION = '0.9930';
129f11ffb7Safresh1our $CLASS = 'version';
139f11ffb7Safresh1our (@ISA, $STRICT, $LAX);
146fb12b70Safresh1
156fb12b70Safresh1# avoid using Exporter
166fb12b70Safresh1require version::regex;
176fb12b70Safresh1*version::is_lax = \&version::regex::is_lax;
186fb12b70Safresh1*version::is_strict = \&version::regex::is_strict;
196fb12b70Safresh1*LAX = \$version::regex::LAX;
209f11ffb7Safresh1*LAX_DECIMAL_VERSION = \$version::regex::LAX_DECIMAL_VERSION;
219f11ffb7Safresh1*LAX_DOTTED_DECIMAL_VERSION = \$version::regex::LAX_DOTTED_DECIMAL_VERSION;
226fb12b70Safresh1*STRICT = \$version::regex::STRICT;
239f11ffb7Safresh1*STRICT_DECIMAL_VERSION = \$version::regex::STRICT_DECIMAL_VERSION;
249f11ffb7Safresh1*STRICT_DOTTED_DECIMAL_VERSION = \$version::regex::STRICT_DOTTED_DECIMAL_VERSION;
256fb12b70Safresh1
266fb12b70Safresh1sub import {
276fb12b70Safresh1    no strict 'refs';
286fb12b70Safresh1    my ($class) = shift;
296fb12b70Safresh1
306fb12b70Safresh1    # Set up any derived class
316fb12b70Safresh1    unless ($class eq $CLASS) {
326fb12b70Safresh1	local $^W;
336fb12b70Safresh1	*{$class.'::declare'} =  \&{$CLASS.'::declare'};
346fb12b70Safresh1	*{$class.'::qv'} = \&{$CLASS.'::qv'};
356fb12b70Safresh1    }
366fb12b70Safresh1
376fb12b70Safresh1    my %args;
386fb12b70Safresh1    if (@_) { # any remaining terms are arguments
396fb12b70Safresh1	map { $args{$_} = 1 } @_
406fb12b70Safresh1    }
416fb12b70Safresh1    else { # no parameters at all on use line
426fb12b70Safresh1	%args =
436fb12b70Safresh1	(
446fb12b70Safresh1	    qv => 1,
456fb12b70Safresh1	    'UNIVERSAL::VERSION' => 1,
466fb12b70Safresh1	);
476fb12b70Safresh1    }
486fb12b70Safresh1
496fb12b70Safresh1    my $callpkg = caller();
506fb12b70Safresh1
516fb12b70Safresh1    if (exists($args{declare})) {
526fb12b70Safresh1	*{$callpkg.'::declare'} =
536fb12b70Safresh1	    sub {return $class->declare(shift) }
546fb12b70Safresh1	  unless defined(&{$callpkg.'::declare'});
556fb12b70Safresh1    }
566fb12b70Safresh1
576fb12b70Safresh1    if (exists($args{qv})) {
586fb12b70Safresh1	*{$callpkg.'::qv'} =
596fb12b70Safresh1	    sub {return $class->qv(shift) }
606fb12b70Safresh1	  unless defined(&{$callpkg.'::qv'});
616fb12b70Safresh1    }
626fb12b70Safresh1
636fb12b70Safresh1    if (exists($args{'UNIVERSAL::VERSION'})) {
646fb12b70Safresh1	local $^W;
656fb12b70Safresh1	*UNIVERSAL::VERSION
666fb12b70Safresh1		= \&{$CLASS.'::_VERSION'};
676fb12b70Safresh1    }
686fb12b70Safresh1
696fb12b70Safresh1    if (exists($args{'VERSION'})) {
706fb12b70Safresh1	*{$callpkg.'::VERSION'} = \&{$CLASS.'::_VERSION'};
716fb12b70Safresh1    }
726fb12b70Safresh1
736fb12b70Safresh1    if (exists($args{'is_strict'})) {
746fb12b70Safresh1	*{$callpkg.'::is_strict'} = \&{$CLASS.'::is_strict'}
756fb12b70Safresh1	  unless defined(&{$callpkg.'::is_strict'});
766fb12b70Safresh1    }
776fb12b70Safresh1
786fb12b70Safresh1    if (exists($args{'is_lax'})) {
796fb12b70Safresh1	*{$callpkg.'::is_lax'} = \&{$CLASS.'::is_lax'}
806fb12b70Safresh1	  unless defined(&{$callpkg.'::is_lax'});
816fb12b70Safresh1    }
826fb12b70Safresh1}
836fb12b70Safresh1
846fb12b70Safresh1
856fb12b70Safresh11;
86