in reply to Comparing decimal values

I'd agree with broquaint above about using the module, but if that's not do-able for some reason a way around this is to take the string, split it into it's components, zero-pad these to a long length, rejoin them, and compare on the end results. Note that this will only work if they have the same number of components, 1.1.5 > 2.0.

The code below incorporates this into a sort routine. If this was to be used for big arrays I'd recommend doing a Schwartzian Transformation using it to avoid the overhead, but for small arrays this shouldn't be too much of a problem.

#!/usr/bin/perl use strict; use warnings; my @test_data = qw(2.0.0 1.2.0 1.2.10 1.1.15 1.2.1 1.2.0); print "$_\n" foreach sort {cmp_versions($a,$b)} @test_data; sub cmp_versions { my ($a, $b) = @_; $a = join '', map { sprintf '%08d', $_ } split /\./, $a; $b = join '', map { sprintf '%08d', $_ } split /\./, $b; return $a cmp $b; }