#!/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; }