my @lines = ; print $_ for sort cmp_ip @lines; sub cmp_ip { my @c = split /\./, $a; my @d = split /\./, $b; for(0.. 3) { return $c[$_] <=> $d[$_] if $c[$_] != $d[$_] } return $a cmp $b }