C is pretty flexible. Just write a create_pool() function, an sprintf()-workalike that allocates memory from the current pool, and a destroy_pool() function that deallocates the current pool. Use one pool per request. It's not Perl, but I'd imagine it's not that inconvenient - and very fast.
(See also: raphters, which was featured on HN not so long ago.)
Probably not very fun, with all the string manipulation involved.