The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

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;
        print "lower" if versioncmp("1.2","1.2a")==-1;
        
        ...
        
        use Sort::Versions;
        %h = (1 => "d", 2 => "c", 3 => "b", 4 => "a");
        @h = sort {versioncmp $h{$a}, $h{$b}} keys %h;

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

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.

Some packages use a different style of version numbering: a simple real number written as a decimal. Sort::Versions has limited support for this style: when comparing two subunits which are both digit groups, if either subunit has a leading zero, then both are treated like digits after a decimal point. So for example:

  0002  <  1
  1.06  <  1.5

This won't always work, because there won't always be a leading zero in real-number style version numbers. There is no way for Sort::Versions to know which style was intended. But a lot of the time it will do the right thing. If you are making up version numbers, the style with (possibly) more than one dot is the style to use.

USAGE

Sort::Versions exports versions and versioncmp. The former is a function suitable for handing directly to sort. The second function, versioncmp, takes two arguments and returns a cmp style comparison value. This is handy in indirect comparisons, as shown above.

AUTHOR

Kenneth J. Albanowski kjahds@kjahds.com (original author) Ed Avis, Matt Johnson {epa98,mwj99}@doc.ic.ac.uk (this release)

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.