【问题标题】:How to Call Perl script from tcl script如何从 tcl 脚本调用 Perl 脚本
【发布时间】:2023-03-17 18:42:01
【问题描述】:

我有一个包含 4 个 perl 命令的文件, 我想从 tcl 打开文件并执行每个 perl 命令。

TCL 脚本

runcmds $file

proc runcmds {file} {

    set fileid [open $file "r"]
    set options [read $fileid]
    close $fileid

    set options [split $options "\n"]    #saperating each commad  with new line

    foreach line $options {
    exec perl $line  
    }
}

执行上述脚本时 我收到的错误为"can't open the perl script /../../ : No Such file or directory " Use -S to search $PATH for it

【问题讨论】:

  • 总的来说,我觉得不错。如果我是你,我会尝试使用所有内容的完整路径:perl 二进制文件以及 $options 变量中可能出现的任何内容。

标签: perl tcl


【解决方案1】:

tl;dr:您缺少-e,导致您的脚本被解释为文件名。


从 Tcl 内部运行 perl 命令:

proc perl {script args} {
    exec perl -e $script {*}$args
    # or in 8.4: eval [list perl -e $script] $args
}

那么你可以这样做:

puts [perl {
    print "Hello "
    print "World\n"
}]

没错,Tcl 中的任意 perl 脚本。您甚至可以根据需要传入其他参数;通过@ARGV 从 perl 访问。 (您需要明确添加其他选项,例如 -p。)

请注意,这可以传递整个脚本;您不需要将它们分开(并且可能不应该;您可以使用单线做很多事情,但维护起来往往很糟糕,并且没有技术上的理由需要它)。

【讨论】:

  • 您好,Donal 谢谢您的信息,您能否提供更多信息,如果 $line 是 perl 文件,如何编写