=head1 VERSION
-Version 0.08
+Version 0.09
=cut
-our $VERSION = '0.08';
+our $VERSION = '0.09';
=head1 DESCRIPTION
/[^\w-]/ and Carp::confess('Invalid argument') for $name, $category;
} elsif (defined $args{atom}) {
my $atom = $args{atom};
- $atom =~ m{^(<|<=|=|>=|>)?([\w-]+)/([\w-]+)(?-v?($version_rx))?$}
+ $atom =~ m{^(<|<=|=|>=|>)?([\w-]+)/([\w-]+)(?:-v?($version_rx))?$}
or Carp::confess('Invalid atom');
($range, $category, $name, $version) = ($1, $2, $3, $4);
} else {
my $v1 = $a1->version;
my $v2;
- if (Scalar::Util::blessed($a2) and $a2->isa(__PACKAGE__)) {
- Carp::confess('Can\'t compare atoms of different packages')
- if $a1->category ne $a2->category or $a1->name ne $a2->name;
+ my $blessed = Scalar::Util::blessed($a2);
+ unless ($blessed and $a2->isa(__PACKAGE__)) {
+ if ($blessed and $a2->isa('CPANPLUS::Dist::Gentoo::Version')) {
+ $v2 = $a2;
+ $a2 = undef;
+ } else {
+ my $maybe_atom = eval { __PACKAGE__->new(atom => $a2) };
+ if (my $err = $@) {
+ $v2 = eval { CPANPLUS::Dist::Gentoo::Version->new($a2) };
+ Carp::confess("Can't compare an atom against something that's not an atom, an atom string ($err), a version or a version string ($@)") if $@;
+ $a2 = undef;
+ } else {
+ $a2 = $maybe_atom;
+ }
+ }
+ }
+
+ if (defined $a2) {
$v2 = $a2->version;
- } else {
- $v2 = $a2;
+
+ my $p1 = $a1->qualified_name;
+ my $p2 = $a2->qualified_name;
+ Carp::confess("Atoms for different packages $p1 and $p2") unless $p1 eq $p2;
}
($v1, $v2) = ($v2, $v1) if $r;
+ return (defined $v1 or 0) <=> (defined $v2 or 0) unless defined $v1
+ and defined $v2;
+
return $v1 <=> $v2;
}