The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Sort::Versions - a perl 5 module for sorting of revision-like numbers

SYNOPSIS

        use Sort::Versions;
        @l = sort versions qw( 1.2 1.2.0 1.2a.0 1.2.a 1.a 02.a );

        ...

        use Sort::Versions qw(versioncmp);
        print "lower" if versioncmp("1.2","1.2a")==-1;

DESCRIPTION

Sort::Versions allows easy sorting of mixed non-numeric and numeric strings, like the "version numbers" that many shared library systems and revision control packages use. This is quite useful if you are trying to deal with shared libraries. It can also be applied to applications that intersperse variable-width numeric fields within text. Other applications can undoubtedly be found.

For an explanation of the algorithm, it's simplest to look at these examples:

  1.1   <  1.2
  1.1a  <  1.2
  1.1   <  1.1.1
  1.1   <  1.1a
  1.1.a <  1.1a
  1     <  a
  a     <  b
  1     <  2
  1     <  0002
  1.5   <  1.06

More precisely (but less comprehensibly), the two strings are treated as subunits delimited by periods. Each subunit can contain any number of groups of digits or non-digits. If digit groups are being compared on both sides, a numeric comparison is used, otherwise a ASCII ordering is used. A group or subgroup with more units will win if all comparisons are equal.

One important thing to note is that if a numeric comparison is made, then leading zeros are ignored. Thus 1.5 sorts before 1.06, since two separate comparisons are being made: 1 == 1, and 5 < 6. This is not the same as if(1.5 < 1.06) {...}.

USAGE

Sort::Versions only exports versions by default, which is a function suitable for giving to sort. A second function, versioncmp is available which takes two arguments and returns a cmp style comparison value.

AUTHOR

Kenneth J. Albanowski kjahds@kjahds.com

Copyright (c) 1996, Kenneth J. Albanowski. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.