如何将字符串解释为perl代码并在没有eval的情况下执行它?

时间:2012-08-06 09:29:28

标签: perl

我理解“string-eval”可以用于它。但我正在寻找一些替代方案来实现它eval。理由是“字符串评估”失败了perl评论家,根据客户政策,我不能使用它。

所以,如果没有eval,请告诉我一些替代方法。

以下是我要做的事情:

我将动态生成的代码ref传递给函数。此函数评估此代码ref并将结果分配给变量。

3 个答案:

答案 0 :(得分:9)

Perl批评对象为字符串eval,因为“将字符串解释为perl代码并执行它”通常是解决任何问题的不良解决方案。

你不能通过找到另一个功能来做同样的事情来解决它(好吧,你可以,但那将完全忽略了这一点)。

答案 1 :(得分:6)

Coderefs不需要运行eval。只需取消引用coderef即可调用它。这在perldoc perlref中解释。

my $code = sub {
    my ($name) = @_;
    say "Hi, $name!";
};
$code->('rpg');

答案 2 :(得分:0)

这适合我。

#!/usr/bin/perl
use strict;
use warnings;

sub exec_code {
my ($c)=@_;
return &{$c};
}

my $coderef = sub {
    print "Hello, from sub";
};

exec_code($coderef);