【问题标题】:Executing Perl script from Tcl从 Tcl 执行 Perl 脚本
【发布时间】:2022-02-03 08:25:33
【问题描述】:

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

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

Tcl:

eval perl perl_script
puts "Command executed"

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

【问题讨论】:

  • 我对@9​​87654325@一无所知,但this pageeval执行作为参数传递给它的tcl而不是启动外部程序(很像Perl的eval EXPR执行EXPR 结果的 Perl 代码)。我发现你声称这会执行 Perl 脚本值得怀疑,我认为如果你真的使用正确的函数来启动程序,你的问题就会得到解决。
  • 在 Tcl 中,使用 exec 运行外部程序更合适,但即使使用 exec 我也得到了相同的行为。

标签: perl tcl


【解决方案1】:

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

exec perl perl_script

阅读更多关于 exec @https://www.tcl.tk/man/tcl/TclCmd/exec.htm

更新

exec 在命令返回非零退出状态时会抛出错误。您需要用catch 包裹exec 以继续非零退出状态。见WORKING WITH NON-ZERO RESULTS

更新 2

eval perl script_path 能够成功启动 perl 解释器的原因是 tcl 的 unknown 魔术。您可能没有名为 perl 的 tcl proc。因此,tcl 调用“未知”过程,它试图通过在其参数上调用exec 来智能地处理此异常,因为它在$env(PATH) 中找到了一个可执行文件。你可以试试info body unknown 看看这个魔法到底是如何工作的。

【讨论】:

  • unknown 的魔法很长,很神奇,很可能会吓跑马匹。不用太担心。
【解决方案2】:

试试这个:

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

它对我有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多