如何在Perl中使用调度表?

时间:2009-12-15 13:16:49

标签: perl hash dispatch-table

  

可能重复:
  How do I implement dispatch tables in Perl?

我有一个哈希表,其中包含int(rand())等命令。 我该如何执行这些命令?

2 个答案:

答案 0 :(得分:5)

您可以使用eval($str)执行存储在字符串变量$str中的Perl代码。您也可以将代码作为函数引用存储在哈希中,例如:

$hash{'random'} = sub { int(rand()) }; 

这样,只要你想要一个随机值,就可以编写$hash{'random'}->()来执行该函数。

另请参阅PerlMonks上的Implementing Dispatch Tables

答案 1 :(得分:1)

正如其他人所说,你可以使用eval执行它们。但请注意,通过eval执行可能受污染的源的任意字符串是一个主要的安全漏洞,如果您的应用程序性能很重要,则容易变慢。

您可以使用Safe module删除安全漏洞(不确定它是多么好,但比裸eval好得多),但性能问题将始终存在,因为Perl必须编译您的在执行主程序时执行代码。