Provided by: libtcl-perl_1.05+ds-1build2_amd64 bug

NAME

       Tcl - Tcl extension module for Perl

SYNOPSIS

           use Tcl;

           $interp = Tcl->new;
           $interp->Eval('puts "Hello world"');

DESCRIPTION

       The Tcl extension module gives access to the Tcl library with functionality and interface similar to the
       C functions of Tcl.  In other words, you can

       •   create Tcl interpreters

           The  Tcl  interpreters  so created are Perl objects whose destructors delete the interpreters cleanly
           when appropriate.

       •   execute Tcl code in an interpreter

           The code can come from strings, files or Perl filehandles.

       •   bind in new Tcl procedures

           The new procedures can be either C  code  (with  addresses  presumably  obtained  using  dl_open  and
           dl_find_symbol)  or  Perl  subroutines  (by  name,  reference  or  as anonymous subs). The (optional)
           deleteProc callback in the latter case is another perl subroutine which is called when the command is
           explicitly deleted by name or else when the destructor for the interpreter object  is  explicitly  or
           implicitly called.

       •   Manipulate the result field of a Tcl interpreter

       •   Set and get values of variables in a Tcl interpreter

       •   Tie perl variables to variables in a Tcl interpreter

           The variables can be either scalars or hashes.

   Methods in class Tcl
       To create a new Tcl interpreter, use

           $interp = Tcl->new;

       The  following  methods  and  routines  can then be used on the Perl object returned (the object argument
       omitted in each case).

       $interp->Init ()
           Invoke Tcl_Init on the interpreter.

       $interp->CreateSlave (NAME, SAFE)
           Invoke Tcl_CreateSlave on the interpreter.  Name is arbitrary.  The safe variable, if true, creates a
           safe sandbox interpreter.
            See: http://www.tcl.tk/software/plugin/safetcl.html
                 http://www.tcl.tk/man/tcl8.4/TclCmd/safe.htm

           This command returns a new interpreter.

       $interp->Eval (STRING, FLAGS)
           Evaluate script STRING in the interpreter. If the script returns successfully (TCL_OK) then the  Perl
           return  value corresponds to Tcl interpreter's result otherwise a die exception is raised with the $@
           variable corresponding to Tcl's interpreter result object. In each case, corresponds  means  that  if
           the method is called in scalar context then the string result is returned but if the method is called
           in  list context then the result is split as a Tcl list and returned as a Perl list.  The FLAGS field
           is optional and can be a bitwise OR of the constants Tcl::EVAL_GLOBAL or Tcl::EVAL_DIRECT.

       $interp->GlobalEval (STRING)
           REMOVED.  Evalulate script STRING at global level.  Call Eval(STRING, Tcl::EVAL_GLOBAL) instead.

       $interp->EvalFile (FILENAME)
           Evaluate the contents of the file with name FILENAME. Otherwise, the same as Eval() above.

       $interp->EvalFileHandle (FILEHANDLE)
           Evaluate the contents of the Perl filehandle FILEHANDLE. Otherwise, the same as Eval() above.  Useful
           when using the filehandle DATA to tack on a Tcl script following an __END__ token.

       $interp->call (PROC, ARG, ...)
           Looks  up  procedure  PROC  in  the  interpreter  and invokes it using Tcl's eval semantics that does
           command tracing and will use the ::unknown (AUTOLOAD) mechanism.  The arguments (ARG,  ...)  are  not
           passed through the Tcl parser.  For example, spaces embedded in any ARG will not cause it to be split
           into two Tcl arguments before being passed to PROC.

           Before invoking procedure PROC special processing is performed on ARG list:

           1.   All  subroutine  references within ARG will be substituted with Tcl name which is responsible to
           invoke this subroutine. This Tcl name will be created using CreateCommand subroutine (see below).

           2.  All  references  to  scalars  will  be  substituted  with  names  of  Tcl  variables  transformed
           appropriately.

           These first two items allow one to write and expect it to work properly such code as:

             my $r = 'aaaa';
             button(".d", -textvariable => \$r, -command=>sub {$r++});

           3.  All  references  to  hashes  will  be  substituted  with names of Tcl array variables transformed
           appropriately.

           4.  As a special case, there is a mechanism to deal with  Tk's  special  event  variables  (they  are
           mentioned  as  '%x',  '%y' and so on throughout Tcl).  When creating a subroutine reference that uses
           such variables, you must declare the desired variables using Tcl::Ev as the  first  argument  to  the
           subroutine.  Example:

             sub textPaste {
                 my ($x,$y,$w) = @_;
                 widget($w)->insert("\@$x,$y", $interp->Eval('selection get'));
             }
             $widget->bind('<2>', [\&textPaste, Tcl::Ev('%x', '%y'), $widget] );

       $interp->return_ref (NAME)
           returns   a   reference  corresponding  to  NAME,  which  was  associated  during  previously  called
           "$interpnt->call(...)" preprocessing. As a typical example this could be variable associated  with  a
           widget.

       $interp->delete_ref (NAME)
           deletes  and returns a reference corresponding to NAME, which was associated during previously called
           "$interpnt->call(...)" preprocessing.

       $interp->icall (PROC, ARG, ...)
           Looks up procedure PROC in the interpreter and invokes  it  using  Tcl's  eval  semantics  that  does
           command  tracing  and  will use the ::unknown (AUTOLOAD) mechanism.  The arguments (ARG, ...) are not
           passed through the Tcl parser.  For example, spaces embedded in any ARG will not cause it to be split
           into two Tcl arguments before being passed to PROC.

           This is the lower-level procedure that the 'call' method uses.  Arguments are  converted  efficiently
           from Perl SVs to Tcl_Objs.  A Perl AV array becomes a Tcl_ListObj, an SvIV becomes a Tcl_IntObj, etc.
           The reverse conversion is done to the result.

       $interp->invoke (PROC, ARG, ...)
           Looks  up procedure PROC in the interpreter and invokes it directly with arguments (ARG, ...) without
           passing through the Tcl parser. For example, spaces embedded in any ARG will not cause it to be split
           into two Tcl arguments before being passed to PROC.  This differs from icall/call in that it directly
           invokes the command name without allowing  for  command  tracing  or  making  use  of  Tcl's  unknown
           (AUTOLOAD)  mechanism.   If  the command does not already exist in the interpreter, and error will be
           thrown.

           Arguments are converted  efficiently  from  Perl  SVs  to  Tcl_Objs.   A  Perl  AV  array  becomes  a
           Tcl_ListObj, an SvIV becomes a Tcl_IntObj, etc.  The reverse conversion is done to the result.

       Tcl::Ev (FIELD, ...)
           Used  to declare %-substitution variables of interest to a subroutine callback.  FIELD is expected to
           be of the form "%#" where # is a single character, and multiple fields may be specified.   Returns  a
           blessed  object  that  the  'call' method will recognize when it is passed as the first argument to a
           subroutine in a callback.  See description of 'call' method for details.

       $interp->result ()
           Returns the current Tcl interpreter result. List v. scalar context is handled as in Eval() above.

       $interp->CreateCommand (CMDNAME, CMDPROC, CLIENTDATA, DELETEPROC, FLAGS)
           Binds a new procedure named CMDNAME into the interpreter. The CLIENTDATA and DELETEPROC arguments are
           optional. There are two cases:

           (1) CMDPROC is the address of a C function

           (presumably obtained using dl_open and dl_find_symbol. In this case  CLIENTDATA  and  DELETEPROC  are
           taken to be raw data of the ClientData and deleteProc field presumably obtained in a similar way.

           (2) CMDPROC is a Perl subroutine

           (either  a  sub  name,  a sub reference or an anonymous sub). In this case CLIENTDATA can be any perl
           scalar (e.g. a ref to some other data) and DELETEPROC must be a perl sub too. When CMDNAME is invoked
           in the Tcl interpreter, the arguments passed to the Perl sub CMDPROC are

               (CLIENTDATA, INTERP, LIST)

           where INTERP is a Perl object for the Tcl interpreter which called out and LIST is a Perl list of the
           arguments CMDNAME was called with.  If the 1-bit of FLAGS is set then the 3 first  arguments  on  the
           call  to  CMDPROC  are suppressed.  As usual in Tcl, the first element of the list is CMDNAME itself.
           When CMDNAME is deleted from the interpreter (either explicitly with  DeleteCommand  or  because  the
           destructor for the interpreter object is called), it is passed the single argument CLIENTDATA.

       $interp->DeleteCommand (CMDNAME)
           Deletes  command  CMDNAME  from  the  interpreter.  If the command was created with a DELETEPROC (see
           CreateCommand above), then it is invoked at this point. When a Tcl interpreter  object  is  destroyed
           either  explicitly  or  implicitly, an implicit DeleteCommand happens on all its currently registered
           commands.

       $interp->SetResult (STRING)
           Sets Tcl interpreter result to STRING.

       $interp->AppendResult (LIST)
           Appends each element of LIST to Tcl's interpreter result object.

       $interp->AppendElement (STRING)
           Appends STRING to Tcl interpreter result object as an extra Tcl list element.

       $interp->ResetResult ()
           Resets Tcl interpreter result.

       $interp->SplitList (STRING)
           Splits STRING as a Tcl list. Returns a Perl list or the empty list if there was an error (i.e. STRING
           was not a properly formed Tcl list).  In the  latter  case,  the  error  message  is  left  in  Tcl's
           interpreter result object.

       $interp->SetVar (VARNAME, VALUE, FLAGS)
           The  FLAGS  field  is  optional.  Sets  Tcl  variable  VARNAME in the interpreter to VALUE. The FLAGS
           argument is the  usual  Tcl  one  and  can  be  a  bitwise  OR  of  the  constants  Tcl::GLOBAL_ONLY,
           Tcl::LEAVE_ERR_MSG, Tcl::APPEND_VALUE, Tcl::LIST_ELEMENT.

       $interp->SetVar2 (VARNAME1, VARNAME2, VALUE, FLAGS)
           Sets  the  element VARNAME1(VARNAME2) of a Tcl array to VALUE. The optional argument FLAGS behaves as
           in SetVar above.

       $interp->GetVar (VARNAME, FLAGS)
           Returns the value of Tcl variable VARNAME. The optional argument FLAGS behaves as in SetVar above.

       $interp->GetVar2 (VARNAME1, VARNAME2, FLAGS)
           Returns the value of the element VARNAME1(VARNAME2) of a Tcl  array.   The  optional  argument  FLAGS
           behaves as in SetVar above.

       $interp->UnsetVar (VARNAME, FLAGS)
           Unsets Tcl variable VARNAME. The optional argument FLAGS behaves as in SetVar above.

       $interp->UnsetVar2 (VARNAME1, VARNAME2, FLAGS)
           Unsets  the  element  VARNAME1(VARNAME2)  of  a Tcl array.  The optional argument FLAGS behaves as in
           SetVar above.

   Linking Perl and Tcl variables
       You can tie a Perl variable (scalar or hash) into class Tcl::Var  so  that  changes  to  a  Tcl  variable
       automatically  "change"  the  value of the Perl variable. In fact, as usual with Perl tied variables, its
       current value is just fetched from the Tcl variable when needed and setting the  Perl  variable  triggers
       the setting of the Tcl variable.

       To  tie  a  Perl  scalar $scalar to the Tcl variable tclscalar in interpreter $interp with optional flags
       $flags (see SetVar above), use

               tie $scalar, "Tcl::Var", $interp, "tclscalar", $flags;

       Omit the $flags argument if not wanted.

       To tie a Perl hash %hash to the Tcl array variable array  in  interpreter  $interp  with  optional  flags
       $flags (see SetVar above), use

               tie %hash, "Tcl::Var", $interp, "array", $flags;

       Omit  the  $flags  argument  if  not wanted. Any alteration to Perl variable $hash{"key"} affects the Tcl
       variable array(key) and vice versa.

   Accessing Perl from within Tcl
       After creation of Tcl interpreter, in addition to evaluation of Tcl/Tk commands within  Perl,  other  way
       round also instantiated. Within a special namespace " ::perl " following objects are created:

          ::perl::Eval

       So it is possible to use Perl objects from within Tcl.

   Moving Tcl/Tk around with Tcl.pm
       NOTE:  explanations  below is for developers managing Tcl/Tk installations itself, users should skip this
       section.

       In order to create Tcl/Tk application with this module, you need to make sure that  Tcl/Tk  is  available
       within visibility of this module. There are many ways to achieve this, varying on ease of starting things
       up and providing flexible moveable archived files.

       Following list enumerates them, in order of increased possibility to change location.

       •   First method

           Install  Tcl/Tk  first,  then install Perl module Tcl, so installed Tcl/Tk will be used. This is most
           normal approach, and no care of Tcl/Tk distribution is taken on Perl side (this  is  done  on  Tcl/Tk
           side)

       •   Second method

           Copy  installed  Tcl/Tk binaries to some location, then install Perl module Tcl with a special action
           to make Tcl.pm know of this location. This approach makes sure that only chosen Tcl  installation  is
           used.

       •   Third method

           During  compiling Tcl Perl module, Tcl/Tk could be statically linked into module's shared library and
           all other files zipped into a single archive, so each file extracted when needed.

           To link Tcl/Tk binaries, prepare their libraries and then instruct Makefile.PL to use these libraries
           in a link stage.  (TODO provide better detailed description)

Other Tcl interpreter methods

       export_to_tcl method
         An interpreter method, export_to_tcl, is used to expose a number of perl subroutines and variables  all
         at once into tcl/tk.

         export_to_tcl  takes  a  hash  as  arguments, which represents named parameters, with following allowed
         values:

         namespace => '...'
             tcl namespace, where commands and variables are to  be  created,  defaults  to  'perl'.  If  ''  is
             specified - then global namespace is used. A possible '::' at end is stripped.

         subs => { ... }
             anonymous hash of subs to be created in Tcl, in the form /tcl name/ => /code ref/

         vars => { ... }
             anonymous hash of vars to be created in Tcl, in the form /tcl name/ => /code ref/

         subs_from => '...'
             a name of Perl namespace, from where all existing subroutines will be searched and Tcl command will
             be created for each of them.

         vars_from => '...'
             a  name  of  Perl  namespace,  from  where  all  existing variables will be searched, and each such
             variable will be tied to Tcl.

         An example:

           use strict;
           use Tcl;

           my $int = Tcl->new;

           $tcl::foo = 'qwerty';
           $int->export_to_tcl(subs_from=>'tcl',vars_from=>'tcl');

           $int->Eval(<<'EOS');
           package require Tk

           button .b1 -text {a fluffy button} -command perl::fluffy_sub
           button .b2 -text {a foo button} -command perl::foo
           entry .e -textvariable perl::foo
           pack .b1 .b2 .e
           focus .b2

           tkwait window .
           EOS

           sub tcl::fluffy_sub {
               print "Hi, I am a fluffy sub\n";
           }
           sub tcl::foo {
               print "Hi, I am foo\n";
               $tcl::foo++;
           }

       export_tcl_namespace
         extra convenience sub, binds to tcl all subs and vars from perl tcl:: namespace

AUTHORS

        Malcolm Beattie, 23 Oct 1994
        Vadim Konovalov, 19 May 2003
        Jeff Hobbs, jeff (a) activestate . com, 22 Mar 2004
        Gisle Aas, gisle (a) activestate . com, 14 Apr 2004

       Special thanks for contributions to Jan Dubois, Slaven Rezic, Paul Cochrane.

COPYRIGHT

       This program is free software; you can redistribute it and/or modify it under  the  same  terms  as  Perl
       itself.

       See http://www.perl.com/perl/misc/Artistic.html

perl v5.26.0                                       2017-07-26                                           Tcl(3pm)