> I'm trying to implement a loop in a Tcl interpreter from Perl > code but I'm > finding some problems (maybe related with my un-expertise in > TCL :). For > example, I'm trying to implement this simple TCL loop: > > foreach i {1 2 3} { > puts $i > } > > I've tried (in Perl): > > use Tcl; > $i = new Tcl; > $i->Eval('"foreach i {1 2 3} {'); > $i->Eval(' puts $i'); > $i->Eval('}'); > > but the result is: > > tornado:~# perl /tmp/foo > missing close-brace at /tmp/kk line 3.
This is true for all interpreters (not just Tcl/Tk -- also Perl, Python, so on) - you "eval" only complete chunks of code, and not interrupted at arbitrary place. > > Of course, the following works fine in this case: > > use Tcl; > $i = new Tcl; > $i->Eval('foreach i {1 2 3} { puts $i }'); > > but this solution only is fine for one-command loops. Once again, Tcl::Tk interpreter is less restrictive: in AUTOLOADs previously unknown foreach D:\>perl -MTcl::Tk -we "$i=new Tcl::Tk;$i->foreach('i j',[1,2,3,4],'puts $i$j')" 12 34 D:\>perl -MTcl::Tk -we "$i=new Tcl::Tk;$i->foreach('i',[1,2,3],'puts $i')" 1 2 3 D:\>perl -MTcl::Tk -we "$i=new Tcl::Tk;$i->foreach('i j',[1,2,3,4],'puts $i$j')" 12 34 D:\>perl -MTcl::Tk -we "$i=new Tcl::Tk;$i->foreach('i j',[1,2,3,4],sub {print qq/I am here/})" I am hereI am here > > How can I implemented a TCL loop in general using Perl Tcl module? it is possible... However, I was thinking about doing something more general: some kid of Tcl sequence, and may it will be required for 'snit' multiwidget support in Tcl::Tk. Vadim.