Je conserve le nom de la sous-routine que je veux appeler au moment de l'exécution dans une variable appelée $action. Je l'utilise ensuite pour appeler cette sous-routine au bon moment :
&{\&{$action}}();
Fonctionne bien. La seule chose que je n'aime pas, c'est que c'est moche et qu'à chaque fois que je le fais, je me sens obligé d'ajouter un commentaire pour le prochain développeur :
# call the sub by the name of $action
Quelqu'un connaît-il un moyen plus joli de faire cela ?
MISE À JOUR : L'idée ici était d'éviter d'avoir à maintenir une table de répartition à chaque fois que j'ajoutais un nouveau sous-sujet appelable, puisque je suis le seul développeur, je ne m'inquiète pas du fait que les autres programmeurs suivent ou non les " règles ". Je sacrifie un peu de sécurité pour mon confort. Au lieu de cela, mon module de distribution vérifierait $action pour s'assurer que 1) c'est le nom d'une sous-routine définie et non du code malveillant à exécuter avec eval, et 2) qu'il n'exécuterait pas de sous-programme précédé d'un trait de soulignement, qui serait marqué comme sous-programme interne seulement par cette convention de nommage.
Que pensez-vous de cette approche ? J'oublie souvent de placer des sous-routines sur la liste blanche dans la table d'envoi, et mes clients préfèrent que je prenne le parti du "ça marche" plutôt que du "c'est méchamment sûr". (temps très limité pour développer des applications)
MISE À JOUR FINALE : Je pense que j'ai finalement opté pour une table d'expédition. Bien que je sois curieux de savoir si quelqu'un qui lit cette question a déjà essayé de s'en passer et comment il l'a fait, je dois m'incliner devant la sagesse collective ici. Merci à tous, beaucoup de bonnes réponses.