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; }
In reply to Re: Comparing decimal values
by Molt
in thread Comparing decimal values
by c
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |