my @sorted = map { $_->[1] } # Lose the keys and return just original string sort { $a->[1] cmp $b->[1] } # Compare the keys # Make a temp array with [0] = original string, [1] a combination of desired fields (key). map { [$_, (sprintf("%-5s%-8s%-8s" , split (/\s*,\s*/) )) ] } @{$outputRef};