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