|Pathologically Eclectic Rubbish Lister
That should work just fine as you have it (and has worked that way as far back as 5.004, at least). You can have the name of the subroutine in the scalar passed to sort.
Not only that, but you can go one better. You can pass sort a reference to a subroutine. This is safer and cleaner and faster than using the name of the sub.
For best results, combine this approach with a dispatch table that does your subroutine lookup.