.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
.\" ========================================================================
.de Sh \" Subsection heading
.de Sp \" Vertical space (when we can't use .PP)
.de Vb \" Begin verbatim text
.de Ve \" End verbatim text
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. | will give a
.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
.\" expand to `' in nroff, nothing in troff, for use with C<>.
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
. tm Index:\\$1\t\\n%\t"\\$2"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. \" simple accents for nroff and troff
. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
. \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
.\" ========================================================================
.TH TCL-PERL 1 "2000-12-30" "perl v5.8.0" "User Contributed Perl Documentation"
Tcl vs perl \- very old suspect documentation on porting.
This isn't really a .pod yet, nor is it Tcl vs perl
it is a copy of John's comparison of Malcolm's original perl/Tk
port with the current one. It is also out-of-date in places.
\& From: john@WPI.EDU (John Stoffel )
\& Here are some thoughts on the new Tk extension and how I think the
\& organization of the commands looks. Mostly, I'm happy with it, it
\& makes some things more organized and more consistent with tcl/tk, but
\& since the overlying language is so different, I don't think we need to
\& follow exactly the tcl/tk model for how to call the language.
\& The basic structure of the Tk program is:
\& $top = MainWindow->new();
\& This is pretty much the same as tkperl5a5, with some cosmetic naming
\& changes, and some more useful command name and usage changes. A quick
\& comparison in no particular order follows:
\& ------------------------------- -----------------------------------
\& $top=tkinit(name,display,sync); $top=MainWindow->new();
\& tkpack $w, ... ; $w->pack(...)
\& $w = Class::new($top, ...); $w = $top->Class(...);
\& tkmainloop; Tk::MainLoop;
\& tkbind($w,"<key>",sub); $w->bind("<key>",sub);
\& tkdelete($w, ...); $w->delete(...);
\& $w->scanmark(...); $w->scan("mark", ...);
\& $w->scandragto(...); $w->scan("dragto", ...);
\& $w->tkselect(); $w->Select();
\& $w->selectadjust(...); $w->selection("adjust", ...);
\& $w->selectto(...); $w->selection("to", ...);
\& $w->selectfrom(...); $w->selection("from", ...);
\& $w->tkindex(...); $w->index(...);
\& tclcmd("xxx",...); &Tk::xxx(...) # all Tk commands, but no Tcl at all
\& tclcmd("winfo", xxx, $w, ...); $w->xxx(...);
\& $w->grabstatus(); $w->grab("status");
\& $w->grabrelease(...); $w->grab("release", ...);
\& update(); Tk->update();
\& idletasks(); Tk->update("idletasks");
\& wm("cmd",$w, ...); $w->cmd(...);
\& destroy($w); $w->destroy();
\& $w->OptionGet(name,Class)
\& $w = Entry::new($parent,...)
\& $w = $parent->Entry(...)
\& As this allows new to be inherited from a Window class.
\& 1st element of list is treated as "method" if y is an object reference.
\& (You can have -command => [a,b,c,d,e] too; b..e get passed as args).
\& Object references are now hashes rather than scalars and there
\& is only ever one such per window. The Tcl_CmdInfo and PathName
\& are entries in the hash.
\& (This allows derived classes to
\& re-bless the hash and keep their on stuff in it too.)
\& Tk's "Tcl_Interp" is in fact a ref to "." window.
\& You can find all the Tk windows descended from it as their object
\& references get added (by PathName) into this hash.
\& $w->MainWindow returns this hash from any window.
\& I think that it should extend to multiple tkinits / Tk->news
\& with different Display's - if Tk code does.
\& Finally "bind" passes window as "extra" (or only)
\& Tk::Button->bind(<Any-Enter>,"Enter");
\& Binds Enter events to Tk::Button::Enter by default
\& but gets called as $w->Enter so derived class of Button can just
\& define its own Enter method. &EvWref and associated globals and race
\& conditions are no longer needed.
\& One thing to beware of : commands bound to events with $widget->bind
\& follow same pattern, but get passed extra args :
\& $widget->bind(<Any-1>,[sub {print shift}, $one, $two ]);
\& When sub gets called it has :
\& 1st extra arg is reference to the per-widget hash that serves as the
\& perl object for the widget.
\& Every time an XEvent a reference to a special class is placed
\& in the widget hash. It can be retrieved by $w->XEvent method.
\& The methods of the XEvent class are the
\& Tcl/Tk % special characters.
\& $widget->bind(<Any-KeyPress>,
\& print $w->PathName," ",$e->A," pressed ,$e->xy,"\en");
\& XEvent->xy is a special case which returns "@" . $e->x . "," . $e->y
\& which is common in Text package.
\& Because of passing a blessed widget hash to "bound" subs they can be
\& bound to (possibly inherited) methods of the widget's class:
\& Class->bind(<Any-Down>,Down);
\& -command and friends can take a list the 1st element can be a ref to
\& as sub or a method name. Remaining elements are passed as args to the
\& sub at "invoke" time. Thus :
\& $b= $w->Button(blah blah, '-command' => [sub{print shift} , $fred ]);
\& Should do the trick, provided $fred is defined at time of button creation.
\& Thus 1st element of list is equivalent to Malcolm's -method and second
\& would be his -slave. Any further elements are a bonus and avoid
\& having to pass ref to an array/hash as a slave.