#!/usr/bin/perl -w # # Sort version numbers use strict; use warnings; { my @versions = qw/2.4.74 3.2.5 1.14.56 1.45.2 3.14.75/; print "Original version string:\n" . join( "\n", @versions ) . "\n"; print "Sorted version strings:\n" . join( "\n", sort compareVersionStrings @versions ) . "\n"; } # Compare two version strings. # # Among other assumptions, this code assumes that the version strings have the # same number of elements in them. Thus, comparing 3 against 2 will work; as # will 3.1 against 2.7 and 3.1.4 against 2.7.18. Comparing 2.0 against 4 will # fail, as will 2.0 against 4.5.6. sub compareVersionStrings { my ( @a, @b ); my @left = split( /\./, $a ); my @right = split( /\./, $b ); return ( $left[0] <=> $right[0] || $left[1] <=> $right[1] || $left[2] <=> $right[2] ); }