Alien-Build
view release on metacpan or search on metacpan
lib/Alien/Build/Version/Basic.pm view on Meta::CPAN
my @x = split /\./, ${$_[0]};
my @y = split /\./, ${ref($_[1]) ? $_[1] : version($_[1])};
while(@x or @y)
{
my $x = (shift @x) || 0;
my $y = (shift @y) || 0;
return $x <=> $y if $x <=> $y;
}
0;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Alien::Build::Version::Basic - Very basic version object for Alien::Build
=head1 VERSION
version 2.84
=head1 SYNOPSIS
OO interface:
use Alien::Build::Version::Basic;
my $version = Alien::Build::Version::Basic->new('1.2.3');
if($version > '1.2.2') # true
{
...
}
Function interface:
use Alien::Build::Version::Basic qw( version );
if(version('1.2.3') > version('1.2.2')) # true
{
...
}
my @sorted = sort map { version($_) } qw( 2.1 1.2.3 1.2.2 );
# will come out in the order 1.2.2, 1.2.3, 2.1
=head1 DESCRIPTION
This module provides a very basic class for comparing versions.
This is already a crowded space on CPAN. Parts of L<Alien::Build>
already use L<Sort::Versions>, which is fine for sorting versions.
Sometimes you need to compare to see if versions match exact I<values>,
and the best candidates (such as L<Sort::Versions> on CPAN compare
C<1.2.3.0> and C<1.2.3> as being different. This class compares
those two as the same.
This class is also quite limited, in that it only works with version
schemes using a doted version numbers or real numbers with a fixed
number of digits. Versions with: dashes, letters, hex digits, or
anything else are not supported.
This class overloads both C<E<lt>=E<gt>> and C<cmp> to compare the version in
the way that you would expect for version numbers. This way you can
compare versions like numbers, or sort them using sort.
if(version($v1) > version($v2))
{
...
}
my @sorted = sort map { version($_) } @unsorted;
it also overloads C<""> to stringify as whatever string value you
passed to the constructor.
=head1 CONSTRUCTOR
=head2 new
my $version = Alien::Build::Version::Basic->new($value);
This is the long form of the constructor, if you don't want to import
anything into your namespace.
=head2 version
my $version = version($value);
This is the short form of the constructor, if you are sane. It is
NOT exported by default so you will have to explicitly import it.
=head1 METHODS
=head2 as_string
my $string = $version->as_string;
my $string = "$version";
Returns the string representation of the version object.
=head2 cmp
my $bool = $version->cmp($other);
my $bool = $version <=> $other;
my $bool = $version cmp $other;
Returns C<-1>, C<0> or C<1> just like the regular C<E<lt>=E<gt>> and C<cmp>
operators. Although C<$version> must be a version object, C<$other> may
be either a version object, or a string that could be used to create a
valid version object.
=head1 SEE ALSO
( run in 1.084 second using v1.01-cache-2.11-cpan-fa01517f264 )