in reply to How to sort IP addresses

One way to do this is with a Schwartzian Transform. Reading the code from bottom to top, read the IPs into a map that chomps off the newline then constructs an anonymous array with the IP as first element and it's four parts as the next elements. Pass that anonymous array into the sort routine which does ascending numerical sort on the IP parts, passing the now sorted anonymous list into the next map. Finally, map the original IP address out in a quoting construct along with a newline and print.

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{\.} ] } <DATA>; __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

Here's the output

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

I hope this is of use.

Cheers,

JohnGG

Update: Fixed code indentation.