Domanda

Sono molto nuovo e inesperto per le vie della programmazione TCL. Ho scritto uno script che chiama un proc scritto da qualcun altro, prima di rimuovere il file di output. E poi fa un po 'di logica addizionale che ho scritto.

I spostato la logica in una seconda proc e immediatamente un mazzo di esso rotto (ossia i comandi rm).

Da quello che posso dire, il primo programma su una linea interna l'esecuzione centrale (il testo seguente definizioni proc) esegue normalmente senza un comando "exec". Tuttavia, se lo si sposta all'interno di un proc, ora ha bisogno di un comando "exec".

Qualcuno può spiegarmi perché TCL comporta in questo modo?

per es.

proc helloworld {} {
  puts "hi"
}
#works
rm my_file 
helloworld

..

proc helloworld {} {
  #doesn't work
  rm my_file 
  puts "hi"
}
helloworld

..

proc helloworld {} {
  #works
  eval rm my_file 
  puts "hi"
}
helloworld

..

proc helloworld {} {
  #works
  file delete my_file 
  puts "hi"
}
helloworld

* Nota: questo strano comportamento può essere specifico per il programma che sto alimentando lo script per VMD, che ha il suo costruito nel comportamento TCL. Forse nelle vostre risposte è possibile indicare se questo è normale per gli altri interpreti come bene?

Altri suggerimenti

Nota: questo è programatically verificabile anche, tramite la variabile tcl_interactive , che è "1" se il Tcl viene eseguito tramite una shell interattiva, e "0" in caso contrario. La variabile è inoltre configurabile, quindi si può avviare una shell interattiva, allora [set tcl_interactive 0] , e proseguire. A questo punto, si perde tali caratteristiche come

  • % Prompt dei comandi
  • nome proc / nome completamento del comando (cioè: non può digitare [pu "xyz"] e ottenere l'effetto di battitura [puts "xyz"] , come una shell interattiva)
  • "shell-out" automatico per avere comandi esterni completano una richiesta (come la "rm" in questa domanda iniziale)
  • e forse altri ...

        
  • scroll top