in reply to Strict and runtime sub names

Since you have the eval block there, it would seem more natural to do:
eval { no strict "refs"; &$sub_name(@args) }
No need to turn it back on afterward; the no strict is scoped only to that block.

You can get away without no strict, doing something like:

eval { @_ = @args; goto &$sub_name }
but IMO that just obscures what you are doing.