Perl将参数传递给eval

ehr*_*etf 4 perl arguments eval

我正面临使用eval函数的问题.

实际上我在SQL数据库中有一些函数名,我的目标是在perl中执行这些函数(在SQL中检索之后).

这是我正在做的,考虑到$ RssSource - > {$ k} {Proceed}包含"&test"作为从SQL检索的字符串:

my $str2 = "ABCD";
eval "$RssSource->{$k}{Proceed}";warn if $@;

sub test
{
   my $arg = shift;

   print "fct TEST -> ", $row, "\n";
}
Run Code Online (Sandbox Code Playgroud)

这工作正常并显示:

fct TEST ->
Run Code Online (Sandbox Code Playgroud)

但是我希望能够将$ str2作为参数传递给$ RssSource - > {$ k} {Proceed}但我不知道怎样,我尝试的每种语法都会返回错误:

eval "$RssSource->{$k}{Proceed}$str2"
eval "$RssSource->{$k}{Proceed}($str2)"
eval "$RssSource->{$k}{Proceed}"$str2
eval "$RssSource->{$k}{Proceed}"($str2)
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何正确地将参数传递给被评估的函数吗?

非常感谢你的帮助

问候.

弗洛朗

ike*_*ami 5

我将假设$RssSource->{$k}{Proceed}总是包含name或者&name,否则你所要求的内容没有多大意义.

my $func_name = $RssSource->{$k}{Proceed};
$func_name =~ s/&//;
my $func_ref = \&$func_name;    # Works with strict on!
$func_ref->(@args);
Run Code Online (Sandbox Code Playgroud)

如果要添加一些错误检查,以下将检查是否可以调用sub:

defined(&$func_ref)
Run Code Online (Sandbox Code Playgroud)