#! /usr/bin/perl use strict; use warnings; my @nodes = qw( db.blah.org de.yahoo.com mail.example.org www.aol.com www.example.org www.freshmeat.net www.hotdoggie.com.au www.blah.org ); # Schwartzian Transform my @sorted = map { $_->[0] } # sort by domain sort { $a->[1] cmp $b->[1] } # "extract" domain.tld map { [ $_, join '.', (split m/\./)[-2,-1] ] } @nodes; # check result { local $, = local $\ = $/; print @sorted; }