如何在 eval 命令中使用 exec?

How to use exec inside eval command?

我已经将 WORKAREA 设置为某个路径,并且在 Perl 代码中我定义如下:

eval 'exec $ENV{'WORKAREA'}/some/path'
if 0;

我收到错误消息,指出路径 $ENV{'WORKAREA'}/some/path 未定义。有人知道要定义这个吗?

我不确定你在那里复制了什么,但有一些问题。

首先,查看您提供给 eval 的字符串内部。这不是有效的 Perl:

exec $ENV{'WORKAREA'}/some/path

您正在尝试构建表示您想要 exec 的程序路径的字符串,因此引用整个内容(与任何其他字符串一样):

exec "$ENV{'WORKAREA'}/some/path"

甚至更好,使用通用引号,这样您以后就不必转义了:

exec q($ENV{'WORKAREA'}/some/path)

注意我这里用的是q()。您不希望该字符串进行插值,因为该变量已经由您提供给 eval:

的字符串进行了插值
eval "exec q($ENV{'WORKAREA'}/some/path)"

虽然我不确定您 eval 为什么这样做。也许您认为 eval 会保护您免受某些魔法的伤害。但是,exec 并没有做任何神奇的事情。它在您的程序中的存在不应影响任何其他内容:

if( 0 ) { # why are you doing this?
   exec "$ENV{'WORKAREA'}/some/path"
   }