2017-08-11 9 views
0

私はこのスクリプトをEggdrop v1.6.21で実行していますが、起動することができません。私が受けてるのエラーは次のとおりです。Eggdrop-TCLエラー[間違った#引数: "proc name args body"]

のTclエラーファイルの 'eggdrop.conf':

間違った#1引数: "PROC名引数ボディ"

でなければなりません

を実行しながら、 「プロシージャ・ロジット{ニックホストハンドル・チャネル・テキスト} {

問題がある可能性がありますか?これは私のスクリプトです。

package require mysqltcl 

set port {3306} 
set host {127.0.0.1} 
set user {database_user} 
set password {database_password} 
set db {database_name} 

bind pubm - "*" logit 

proc logit {nick uhost handle channel text} { 
    global port 
    global host 
    global user 
    global password 
    global db 

    if {[string match {database_name}} $channel] == 0} { 
    set mysql_handler [mysqlconnect -host $host -port $port -user $user -password $password -db $db] 
    set sql "insert into irc_feed (nickname, host, message) values ('[mysqlescape $nick]', '[mysqlescape $uhost]', '[mysqlescape $text]')" 
    mysqlexec $mysql_handler $sql 

    mysqlclose $mysql_handler 
    } 
} 

ありがとうございました。

+0

私はこの質問を閉じることをお勧めしません。原因は確かにシンプルな誤植でしたが、頻繁に発生するエラーであり、解決策がまだ役立つかもしれません(私はもちろん偏っています)。 –

答えて

4

問題はifの状態です:{database_name}の後に余分な}があります。手続きの本体が早すぎると処理が遅くなり、ifコマンドの本体がprocの意図しない余分な引数になります(最後の閉じ括弧は無効なコマンドになります)。

これは、解析時エラーと呼ばれることがあります。エラーが実行(実行時エラー)に至った場合、Tclは通常、より良いエラーメッセージを生成するのに十分な状況を知っています。

しかし、この時点で、Tclインタプリタはすべて、3つの引数を持つコマンドを実行しようとしていることを知っており、4つ与えられています。したがって、エラーメッセージは非常に曖昧です。

しかし、 "間違った#args"というエラーが通知された場合、通常はそうでないべき場所に空白を挿入するか、中括弧が一致しません。ブレースマッチングエディタは後者の場合に非常に便利です。

+0

パーフェクト!それはそれを解決しました。私はそれを見落として信じられない。 – t0rxe

関連する問題