Pick-TCL

Provides a class to run arbitrary TCL (that's Terminal Control Language,
not the "other" TCL) commands in a local or remote Pick or Pick-like
environment.

Essentially it acts as a wrapper around IPC::Run or Net::OpenSSH,
providing an extra layer of abstraction so that Perl scripts which
need to communicate with a Pick or Pick-like system can use a single
module to do so regardless of whether that system is local or remote.

Beyond that there are only two additional features, as described below.

* Output sanitisation

In the author's experience, many older Pick deployments have been
encountered in the wild configured with non-standard terminal settings
in the same dynamically allocated port range. For various reasons,
those systems' maintainers tend to be highly resistent to making
changes to port terminal settings.

In order to work around the resultant inconsistencies in TCL output,
the exec() method collapses any sequence of one or more control
characters other than tabs into a single newline.

That approach works well except when consecutive newlines in the output
are significant or when binary data are output (both of which are quite
rare in the Pick world). The execraw() method, which does no output
sanitisation, is provided for use in such circumstances.

* Error suppression

Many older Pick deployments still (as of 2013) tend to be found
running on host systems where only long-obsolete releases of
sshd are available. When used with certain (also long-obsolete)
releases of AP or D3, these tend to return false error conditions
at seemingly random intervals.

Of course, the correct solution in such cases is to update to
supported releases of both sshd and D3. However in some legacy
environments that has not proved commercially or politically
feasible.

To work around such circumstances, Pick::TCL ignores exit codes
11 and 255 when the target Pick environment is remote.

DEPENDENCIES

To communicate with remote Pick environments, Pick::TCL requires
Net::OpenSSH. Additionally, the remote user's login shell must be set to
a Bourne-compatible shell.

To communicate with local Pick environment, Pick::TCL requires either
IPC::Run or Net::OpenSSH. If IPC::Run is missing (but Net::OpenSSH is
present), any attempt to connect to a local Pick environment is
silently converted into a remote connection with HOST set to localhost.
Otherwise, IPC::Run is used.

Obviously, for Pick::TCL to be of any use, a working (local or remote)
Pick environment is also required.

INSTALLATION

To install this module, run the following commands:

	perl Makefile.PL
	make
	make test
	make install

LICENSE AND COPYRIGHT

Copyright (C) 2013 Jack Burton

This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.