0

我有一个关于 Perl 动态代码的问题。Perl 中是否有可以用来执行代码的构造。

例如,

$command = " some command";
$perl -> execute($command);

$command运行时间的变化。对不起我的术语。我不知道如何解释它。

我正在尝试做到这一点:我有一个函数可以为数组中的每个引用执行一些命令。

 ...insert example call to function...

假设每个引用都有一个关联的标识符。

 ...insert sample reference...
 ...say something about how you determine the identifier...
 ...say something about how you want to use the identifier...

我无法遍历数组并为每个引用执行,因为命令的一部分因每个引用而异,因为它具有标识符的一部分并且没有详尽的标识符列表。例如,如果$r0具有标识符“r0”,$r0->test("r0")则应执行该命令。

4

2 回答 2

5

如果这是一个外部命令,您可以使用system、 反引号或 Perl 模块中的一个来执行此类操作。

如果要在运行时编译和执行 Perl 代码,可以使用eval. 在许多情况下,人们滥用职权eval是因为他们没有看到更简单的方法来完成工作。

如果您想根据情况决定运行哪个子例程,您可以做各种事情,包括使用软引用(很糟糕!但有时很有用)、调度表等等。

如果您想根据变量中的值选择一种方法,这也很容易:

 $object->$method(...)

但是,您必须告诉我们您要完成的工作。


我仍然不确定你在问什么,但它听起来并不像任何动态的东西。我想这就是你所描述的情况。告诉我这有多接近:

 my @array = ( [ 'r0', 'foo', 'bar' ] );

 foreach my $element ( @array ) {
      my( $identifier, @other_stuff ) = @$element;
      $element->test( $identifier );
      }

如果您可以展示一些示例元素和更完整的(甚至是伪代码)您所拥有的内容的大纲,那将非常有帮助。我们只知道您在问题中告诉我们的内容,而不是您对自己问题的了解。

于 2010-09-24T20:30:07.320 回答
1

您可以使用eval

eval($command);

手册

评估 EXPR

在第一种形式中,EXPR 的返回值被解析并执行,就好像它是一个小的 Perl 程序......

于 2010-09-24T20:27:19.377 回答