我正在尝试从 Tcl 执行 Perl 脚本。
我在 Tcl 中使用eval,它执行 Perl 脚本,但不执行 Tcl 文件中的其他命令。
泰克:
eval perl perl_script
puts "Command executed"
Run Code Online (Sandbox Code Playgroud)
结果:Perl 脚本被执行,但puts命令未被执行。为什么是这样?
在 tcl 中,eval将其参数作为 tcl 代码执行,类似于其 perl 等效项。但是,您不希望这样做,而是需要将 perl 解释器作为外部进程启动,并要求该解释器执行在其命令行中传递的脚本。exec这是tcl的工作。
exec perl perl_script
Run Code Online (Sandbox Code Playgroud)
阅读有关 exec 的更多信息 @ https://www.tcl.tk/man/tcl/TclCmd/exec.htm
更新
exec当命令返回非零退出状态时将抛出错误。您需要exec用 a换行catch才能以非零退出状态继续。请参阅使用非零结果
更新2
之所以eval perl script_path能够成功启动perl解释器,就是tcl的unknown魔力。您可能没有名为 perl 的 tcl 过程。因此,tcl 调用“未知”过程,该过程尝试通过调用exec其参数来智能地处理此异常,因为它在$env(PATH). 你可以尝试info body unknown看看这个魔法到底是如何发挥作用的。