# for example, this'll do what you want sub extract_middle { return shift() =~ /-(.*)-/ ? $1 : '' } @sorted = sort { extract_middle($a) cmp extract_middle($b) } @unsorted;