in reply to Sort a long list of hosts by domain (code)

i'm not sure i agree that you are sorting by domain. domains are grouped, but the overall order of the result is strange. however, i think the following sub does what most people would expect:
sub sort_domains { map { ${$_->[0]} } sort { my ($pa, $pb, $rv) = ($#{$a->[1]}, $#{$b->[1]}, 0); do { $rv ||= $a->[1][$pa] cmp $b->[1][$pb] } while (!$rv and $pa-- and $pb--); $rv ||= ($pb >= 0) ? -1 : ($pa >= 0) ? 1 : 0; } map { [ \$_, [ split /\./, $_ ] ] } @_ }
you can use it like so: my $noodle = join $/, map { sprintf "%64s", $_ } sort_domains keys %hosts;

p.s. let the golf begin

p.p.s. why $noodle?

update: fixed logic bug in line that deals with extra domain parts ($rv ||= ($pb >= 0) ? -1…)