use Benchmark qw(cmpthese); use Socket; use Sort::Key qw(ukeysort keysort); my $n = 1000000; my @address = map { join ('.', map {int rand 256 } 0..3) } 0..$n; print "\@address populated\n"; sub gloryhackish { my @in = @address; my @sorted = map { $_ = inet_ntoa($_) } (sort (map {$_ = inet_aton($_)} @in)); } sub ks { my @sorted = keysort { inet_aton($_) } @address; } sub uks { my @sorted = ukeysort { /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/; ($1 << 24) + ($2 << 16) + ($3 << 8) + $4 } @address; } cmpthese -1, { gloryhackish => \&gloryhackish, keysort => \&ks, ukeysort => \&uks }; #### s/iter gloryhackish keysort ukeysort gloryhackish 24.4 -- -29% -48% keysort 17.2 42% -- -26% ukeysort 12.7 92% 35% --