从tcl执行perl脚本

时间:2014-07-16 16:19:39

标签: tcl

我试图从Tcl执行Perl脚本。

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

的Tcl:

eval perl perl_script
puts "Command executed"

结果:执行了Perl脚本,但没有执行puts命令。这是为什么?

2 个答案:

答案 0 :(得分:4)

在tcl中,eval将其参数作为tcl代码执行,类似于其perl等价物。但是,您不希望这样,而是需要将perl解释器作为外部进程启动,并要求此解释器执行其命令行中传递的脚本。这是tcl。{/ p>中exec的工作

exec perl perl_script

详细了解exec @ https://www.tcl.tk/man/tcl/TclCmd/exec.htm

<强>更新

当命令返回非零退出状态时,

exec将抛出错误。您需要使用exec包裹catch以继续非零退出状态。见WORKING WITH NON-ZERO RESULTS

更新2

eval perl script_path成功启动perl解释器的原因是tcl的unknown魔法。很可能你没有命名perl的tcl proc。因此,tcl调用“未知”proc,它尝试通过在exec上调用$env(PATH)来智能地处理此异常,因为它在info body unknown中找到了可执行文件。您可以尝试{{1}}来了解这种魔法是如何运作的。

答案 1 :(得分:0)

试试这个:

exec sh -c { perl -ape 's/this/that/' tmp.1 > tmp.11 }

它对我有用。