- my $s2;
- if (Scalar::Util::blessed($a2) and $a2->isa(__PACKAGE__)) {
- $s2 = $a2->qualified_name;
- my $v2 = $a2->version;
- $s2 .= "-$v2" if defined $v2;
- } else {
- $s2 = $a2;
+ unless (Scalar::Util::blessed($a2) && $a2->isa(__PACKAGE__)) {
+ $a2 = eval { __PACKAGE__->new(atom => $a2) };
+ Carp::confess("Can't compare an atom against something that's not an atom or an atom string ($@)") if $@;
+ }
+ my $p2 = $a2->qualified_name;
+
+ if (my $c = $p1 cmp $p2) {
+ return $r ? -$c : $c;
+ }