in reply to a sort question

If no individual element of the 'numbers' is > 255

$/ = "\n";; print for map{ join '.', unpack 'C*', $_ } sort map{ pack 'C*', split '\.' } qw[1.1 11.2.3 2.3 11.2.1];; 1.1 2.3 11.2.1 11.2.3

Update: In fact, utilising Unicode, this can handle individual number elements upto >64,000. Which ought to be enough as it would allow a 3-part version number to handle 1 new version every microsecond for a project life exceeding 8 years before it encountered problems.

print for map{ join'.',unpack'U*',$_ } sort map{ pack'U*',split '\.', "1.2.$_.4" } reverse qw[ 1 11 111 127 127 128 129 254 255 256 257 1111 11111 6400 +0 ];; 1.2.1.4 1.2.11.4 1.2.111.4 1.2.127.4 1.2.127.4 1.2.128.4 1.2.129.4 1.2.254.4 1.2.255.4 1.2.256.4 1.2.257.4 1.2.1111.4 1.2.11111.4 1.2.64000.4

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
"Too many [] have been sedated by an oppressive environment of political correctness and risk aversion."