我保留我想在运行时调用一个变量$ action的子程序的名称。然后我使用这个在适当的时间调用该sub:
&{\&{$action}}();
工作正常。我唯一不喜欢的是它是丑陋的,每次我做,我觉得添加一个评论为下一个开发人员:
# call the sub by the name of $action
任何人都知道这样做的更漂亮的方式吗?
更新:这里的想法是避免每次我添加一个新的可调用子,因为我是唯一的开发人员维护一个分派表,我不担心其他程序员遵循或不遵循’规则’。牺牲一点安全为了我的方便。相反,我的分派模块将检查$ action,以确保1)它是一个定义的子程序的名称,而不是恶意代码运行eval,和2)它不会运行任何子以开头的下划线,这将是通过此命名约定标记为仅内部子代。
关于这种方法的任何想法?将调度表中的子程序列入白名单是我将永远忘记的事情,我的客户宁愿我错过“它的工作”一边比“它是邪恶的安全”。 (开发应用程序的时间非常有限)
最后更新:我想我已决定一个派遣表。虽然我很好奇,如果任何人读过这个问题曾经试图去除一个和他们是如何做到的,我必须屈服于这里的集体智慧。感谢所有,许多伟大的反应。