+sub _cmp {
+ my ($a1, $a2, $r) = @_;
+
+ my $s1 = $a1->qualified_name;
+ my $v1 = $a1->version;
+ $s1 .= "-$v1" if defined $v1;
+
+ 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;
+ }
+
+ $s1 cmp $s2;
+}
+