带反引号的 perl eval

perl eval with back quote

我正在将一个 perl 脚本转换成 python 然后我发现了这个我无法理解的函数。

sub set_xyz_hash {
    %xyz = ();
    $_ = join(' ', map { my $a = $_; $a =~ s/\'/\'\"\'\"\'/g; "'$a'" } @ARGV);
    eval `XYZ_ARG0='[=10=]' NZENV_OUTPUT='-a -p xyz' xyz $_`;
}

由于我对perl的了解非常有限,我无法理解这个函数中使用的'eval'。有人可以帮我吗?

注意,eval 与 `(反引号)一起使用。

反引号 运行 外部命令和 return 输出:

my $result = `ls -l`;
print $result;

您的 eval 行的处理方式完全相同:

my $result = `XYZ_ARG0='[=11=]' NZENV_OUTPUT='-a -p xyz' xyz $_`;
eval $result;

它基本上是从被调用脚本的输出中获取一些 Perl 源代码并 运行s 它。