我知道可以使用“string-eval”。但我正在寻找一些替代方案来实现它,而无需eval
. 原因是“字符串评估”使 Perl 批评者失败,并且根据客户端策略我不能使用它。
没有什么可以替代eval
?
这是我正在尝试做的事情:
我将动态生成的代码引用传递给函数。此函数评估此代码引用并将结果分配给变量。
我知道可以使用“string-eval”。但我正在寻找一些替代方案来实现它,而无需eval
. 原因是“字符串评估”使 Perl 批评者失败,并且根据客户端策略我不能使用它。
没有什么可以替代eval
?
这是我正在尝试做的事情:
我将动态生成的代码引用传递给函数。此函数评估此代码引用并将结果分配给变量。
Perl 评论家反对 string-eval,因为“将字符串解释为 perl 代码并执行它”通常是任何问题的糟糕解决方案。
你不能通过仅仅找到另一个函数来做同样的事情来解决它(嗯,你可以,但这完全没有抓住重点)。
Coderefs 不需要eval
运行。只需取消引用 coderef 即可调用它。这在perldoc perlref中进行了解释。
my $code = sub {
my ($name) = @_;
say "Hi, $name!";
};
$code->('rpg');
这对我有用。
#!/usr/bin/perl
use strict;
use warnings;
sub exec_code {
my ($c) = @_;
return &{$c};
}
my $coderef = sub {
print "Hello, from sub";
};
exec_code($coderef);