2

我知道可以使用“string-eval”。但我正在寻找一些替代方案来实现它,而无需eval. 原因是“字符串评估”使 Perl 批评者失败,并且根据客户端策略我不能使用它。

没有什么可以替代eval

这是我正在尝试做的事情:

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

4

3 回答 3

9

Perl 评论家反对 string-eval,因为“将字符串解释为 perl 代码并执行它”通常是任何问题的糟糕解决方案。

你不能通过仅仅找到另一个函数来做同样的事情来解决它(嗯,你可以,但这完全没有抓住重点)。

于 2012-08-06T09:30:59.530 回答
6

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

my $code = sub {
    my ($name) = @_;
    say "Hi, $name!";
};
$code->('rpg');
于 2012-08-06T10:41:43.037 回答
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);
于 2012-08-06T12:15:13.043 回答