我试图从Tcl执行Perl脚本。
我在Tcl中使用eval
,它执行Perl脚本但不执行我的Tcl文件中的其他命令。
的Tcl:
eval perl perl_script
puts "Command executed"
结果:执行了Perl脚本,但没有执行puts
命令。这是为什么?
答案 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 }
它对我有用。