In general you don't! The whole idea of perl/Tk is that you are programming in perl not Tcl. To glean the possible advantages of doing this you might want to read the opinions of Tom Christiansen (a definite perl proponent) at:
ftp://mox.perl.com/pub/perl/versus/tcl
It is nevertheless worth noting that you might still have access to a complete Tcl script from perl via the perl system, or `` (backtick), or even exec mechanisms. Just be careful with I/O waits and return values if you try one of these approaches. Further suggestions may be found in the various perlipc files at:
ftp://ftp.perl.com/perl/info/everything_to_know/A more satisfactory wish-like behavior can be embedded in perl by making appropriate modifications to Dov Grobgeld's perl script that uses sockets for perl<->wish communication:
#!/usr/local/bin/perl ##################################################################### # An example of calling wish as a subshell under Perl and # interactively communicating with it through sockets. # # The script is directly based on Gustaf Neumann's perlwafe script. # # Dov Grobgeld dov@menora.weizmann.ac.il # 1993-05-17 ##################################################################### $wishbin = "/usr/local/bin/wish"; die "socketpair unsuccessful: $!!\n" unless socketpair(W0,WISH,1,1,0); if ($pid=fork) { select(WISH); $| = 1; select(STDOUT); # Create some TCL procedures print WISH 'proc echo {s} {puts stdout $s; flush stdout}',"\n"; # Create the widgets print WISH <<TCL; # This is a comment "inside" wish frame .f -relief raised -border 1 -bg green pack append . .f {top fill expand} button .f.button-pressme -text "Press me" -command { echo "That's nice." } button .f.button-quit -text quit -command { echo "quit" } pack append .f .f.button-pressme {top fill expand} \\ .f.button-quit {top expand} TCL # Here is the main loop which receives and sends commands # to wish. while (<WISH>) { chop; print "Wish sais: <$_>\n"; if (/^quit/) { print WISH "destroy .\n"; last; } } wait; } elsif (defined $pid) { open(STDOUT, ">&W0"); open(STDIN, ">&W0"); close(W0); select(STDOUT); $| = 1; exec "$wishbin --"; } else { die "fork error: $!\n"; }Ilya Zakharevich <ilya@math.ohio-state.edu> has a "ptcl.h" header file for the construction of tcl bindings from pTk (there are limitations to this approach). It was posted to the mailing list archive at:
http://sun20.ccd.bnl.gov/~ptk/archive/ptk.1995.11/0057.htmlIf you absolutely must pass large amounts of pre-parsed data between Tcl and perl then perhaps you should look into Malcolm Beattie's Tcl/Tk extensions to Perl instead. Those modules are distrubuted at CPAN sites. As mentioned above running Tcl/Tk/perl is incompatible with running perl/Tk.
Previous | Return to table of contents | Next