从 Tcl 执行 Perl 脚本

aac*_*raf 1 perl tcl

我正在尝试从 Tcl 执行 Perl 脚本。

我在 Tcl 中使用eval,它执行 Perl 脚本,但不执行 Tcl 文件中的其他命令。

泰克:

eval perl perl_script
puts "Command executed"
Run Code Online (Sandbox Code Playgroud)

结果:Perl 脚本被执行,但puts命令未被执行。为什么是这样?

Gow*_*ham 5

在 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看看这个魔法到底是如何发挥作用的。