从tcl执行perl脚本
我正在尝试从Tcl执行一个Perl脚本 我在Tcl中使用从tcl执行perl脚本,tcl,Tcl,我正在尝试从Tcl执行一个Perl脚本 我在Tcl中使用eval,它执行Perl脚本,但不执行Tcl文件中的其他命令 Tcl: 结果:执行Perl脚本,但不执行put命令。这是为什么?在tcl中,eval将其参数作为tcl代码执行,类似于它的perl等价物。但是,您不希望这样,而是需要将perl解释器作为外部进程启动,并要求该解释器执行在其命令行中传递的脚本。这是tcl中的exec的工作 exec perl perl_script 阅读更多关于exec@ 更新 当命令返回非零退出状态时,exe
eval
,它执行Perl脚本,但不执行Tcl文件中的其他命令
Tcl:
结果:执行Perl脚本,但不执行
put
命令。这是为什么?在tcl中,eval
将其参数作为tcl代码执行,类似于它的perl等价物。但是,您不希望这样,而是需要将perl解释器作为外部进程启动,并要求该解释器执行在其命令行中传递的脚本。这是tcl中的exec
的工作
exec perl perl_script
阅读更多关于exec@
更新
当命令返回非零退出状态时,exec
将抛出错误。您需要将exec
包装为catch
以继续非零退出状态。看
更新2
eval perl script\u path
成功启动perl解释器的原因是tcl的unknown
magic。很可能您没有名为perl的tcl proc。因此,tcl调用“unknown”proc,它试图通过对其参数调用exec
智能地处理此异常,因为它在$env(PATH)
中找到一个可执行文件。您可以尝试info body unknown
来查看这个魔术是如何实际工作的。在tcl中,eval
以tcl代码的形式执行它的参数,类似于它的perl等价物。但是,您不希望这样,而是需要将perl解释器作为外部进程启动,并要求该解释器执行在其命令行中传递的脚本。这是tcl中的exec
的工作
exec perl perl_script
阅读更多关于exec@
更新
当命令返回非零退出状态时,exec
将抛出错误。您需要将exec
包装为catch
以继续非零退出状态。看
更新2
eval perl script\u path
成功启动perl解释器的原因是tcl的unknown
magic。很可能您没有名为perl的tcl proc。因此,tcl调用“unknown”proc,它试图通过对其参数调用exec
智能地处理此异常,因为它在$env(PATH)
中找到一个可执行文件。您可以尝试info body unknown
,看看这个魔术到底是如何工作的。试试这个:
exec sh -c { perl -ape 's/this/that/' tmp.1 > tmp.11 }
它适合我。试试这个:
exec sh -c { perl -ape 's/this/that/' tmp.1 > tmp.11 }
它对我很有用。我对
tcl
一无所知,但是说eval
执行作为参数传递给它的tcl,而不是启动外部程序(很像Perl的eval EXPR
执行Perl代码,其中EXPR
结果)。我觉得你关于这执行Perl脚本的说法值得怀疑,我认为如果你真的使用了正确的函数来启动一个程序,你的问题就会得到解决。在Tcl中,使用exec来运行外部程序更合适,但即使使用exec,我也有同样的行为。我对Tcl
,一无所知,但是说eval
执行作为参数传递给它的tcl,而不是启动外部程序(很像Perl的eval EXPR
执行Perl代码,其中EXPR
的结果)。我觉得你关于这执行Perl脚本的说法值得怀疑,我认为如果你真的使用了正确的函数来启动程序,你的问题就会得到解决。在Tcl中,使用exec来运行外部程序更合适,但即使使用exec,我也得到了同样的行为。谢谢你,Gowtham,我实际上遵循了你的第一次更新,我用exec来抓,效果很好。unknown
魔法很长,很神奇,很可能会吓到马。不用太担心。谢谢你,高谭,我实际上是在关注你的第一次更新,我使用了exec和一个catch,它很有效。unknown
魔法很长,很神奇,很可能会吓到马。不要太担心。