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;
}