use strict; use warnings; print map { qq{$_->[0]\n} } sort { $a->[1] <=> $b->[1] || $a->[2] <=> $b->[2] || $a->[3] <=> $b->[3] || $a->[4] <=> $b->[4] } map { chomp; [ $_, split m{\.} ] } ; __END__ 192.168.0.12 10.100.16.19 172.192.67.18 192.168.3.2 12.45.66.20 192.168.0.2 10.100.116.19 #### 10.100.16.19 10.100.116.19 12.45.66.20 172.192.67.18 192.168.0.2 192.168.0.12 192.168.3.2