Я храню имя подпрограммы, которую я хочу вызвать во время выполнения, в переменной с именем $ action. Затем я использую это для вызова этого саба в нужное время:
&{\&{$action}}();
Работает нормально. Единственное, что мне не нравится, это то, что это ужасно, и каждый раз, когда я делаю это, я чувствую себя обязанным добавить комментарий для следующего разработчика:
# call the sub by the name of $action
Кто-нибудь знает более красивый способ сделать это?
ОБНОВЛЕНИЕ: Идея здесь состояла в том, чтобы избежать необходимости поддерживать таблицу диспетчеризации каждый раз, когда я добавляю новую вызываемую подпрограмму, поскольку я являюсь единственным разработчиком, я не беспокоюсь о том, что другие программисты будут следовать или не следовать «правилам». Пожертвовал немного безопасности для моего удобства. Вместо этого мой диспетчерский модуль проверял бы $ action, чтобы убедиться, что 1) это имя определенной подпрограммы, а не вредоносный код для запуска с eval, и 2) что он не будет запускать подпрограммы с предваряющим подчеркиванием, что будет в соответствии с этим соглашением об именах помечается как внутренняя подпрограмма.
Есть какие-нибудь мысли об этом подходе? Белые подпрограммы в таблице диспетчеризации - это то, что я буду постоянно забывать, и мои клиенты скорее будут ошибаться на стороне «это работает», чем «это злобно безопасно». (очень ограниченное время для разработки приложений)
ЗАКЛЮЧИТЕЛЬНОЕ ОБНОВЛЕНИЕ: Я думаю, что я все-таки определился с таблицей отправки. Хотя мне было бы любопытно, если бы кто-нибудь, кто читает этот вопрос, когда-либо пытался покончить с одним и тем, как они это сделали, я должен здесь склониться перед коллективной мудростью. Спасибо всем, много замечательных ответов.