Thanks for all the responses. It looks like many use features of 5.10. Some of the boxen that will run the code are stuck on early 5.8 so I'll probably need to do use some inefficient code to achieve the result I'm looking for.
I'm also looking forward to playing around with the 5.10 solutions.