Version numbers should be boring and modules such as version and Perl::Version should be boring too.
Yet they are confusing me.
examples/sort_version_confusion.pl
use strict;
use warnings;
use 5.010;
use Perl::Version;
use version;
say "Perl::Version: $Perl::Version::VERSION";
say "version: $version::VERSION";
my @versions = ( '5.11', 'v5.11', '5.011', '5.11');
say '----';
my @sorted = sort { Perl::Version->new( $a ) <=> Perl::Version->new( $b ) } @versions;
for my $s (@sorted) {
say $s;
}
say '----';
my @other = sort { version->parse( $a ) <=> version->parse( $b ) } @versions;
for my $s (@other) {
say $s;
}
And the output
Perl::Version: 1.013
version: 0.9912
----
5.11
v5.11
5.011
5.11
----
v5.11
5.011
5.11
5.11
I am not yet sure which module is confused, but I am, for sure.
It seems that Perl::Version
thinks that 5.11
and v5.11
are the same
while version
thinks they are different.
Not only that, but Perl::Version seems to thin 5.11
equals to 5.011
.
I am fairly sure that should not be the case.
examples/version_compare_confusion.pl
use strict;
use warnings;
use 5.010;
use Perl::Version;
use version;
say Perl::Version->new('5.11') == Perl::Version->new('v5.11'); # 1
say version->parse('5.11') == version->parse('v5.11'); #
say Perl::Version->new('5.011') == Perl::Version->new('v5.11'); # 1
say version->parse('5.011') == version->parse('v5.11'); # 1
say Perl::Version->new('5.011') == Perl::Version->new('5.11'); # 1
say version->parse('5.011') == version->parse('5.11'); # 0