2014-01-13 157 views
1

我有一個帶有4個perl命令的文件, 我想從tcl打開文件並執行每個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

+0

總的來說,它對我來說很好。如果我是你,我會嘗試一切的完整路徑:perl二進制,以及任何可能出現在$ options變量中的東西。 – James

回答

2

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)。

請注意,這可以傳遞整個腳本;你不需要把它們分開(並且可能不應該;你可以用可以做很多單線,但他們往往很難維護,沒有技術理由要求)。

+0

嗨Donal thaks的信息, 你可以給一些更多的信息, 如何寫$ line是一個perl文件 – user3192183