By far the oldest and most popular graphical library used with perl, it is also the most portable, currently running on Un*x, Win32 and Mac OS.

When people first wanted to write graphical applications in perl, the Tk widgets seemed a natural choice to use, as they were comprehensive, easily extensible, and ideally suited to the sort of quick-and-dirty programming that perl was mostly used for at the time. The trouble was that Tk appearred to be irrevocably stuck to everyone's least-favourite scripting language, Tcl, by means of the Tcl Windowing Shell (wish).

The first graphical perl applications were written by Malcolm Beattie, using a perl-4 library that enabled Tcl commands to be embedded in a perl script. Although this worked, it was also an obvious kludge - it still required a basic knowledge of Tcl in order to program, and also still required the wish binary to be installed on the system.

The advent of perl-5 added the ability to communicate directly with C function libraries using the Extension Subroutines (XS) system. This allowed for a cleaner approach to the graphics problem, and Nick Ing-Simmons set about divorcing Tk from Tcl. He first separated out all the sections of the Tk/wish source code that dealt directly with the graphical interface, and with a bit of work was able to compile these routines into a language agnostic library which he called "Portable Tk" (pTk). This library provided a complete implementation of the Tk widget set that was totally independent of Tcl. He then used the XS system to write a set of perl bindings for pTk, and parcelled the two parts together into the perl/Tk package which he submitted to CPAN.

The current version of perl/Tk is 800.023. This is a compete re-implementation of the Tk8.0 widget set, with a few extras from the Tix extensions to Tk added. It is not necessary to have any version of the Tcl/Tk programs or libraries installed in order to use it - the complete source code for pTk is included in the CPAN package. It should be noted that although the perl modules that provide the Tk interface are distributed under the same terms as perl itself (i.e. disjunction of the GPL and Artistic licenses), the pTk library is distributed under a BSD-style license due to its derivation from the original Tk.

Finally, as an example, here's "Hello, World" in perl/Tk:


#!/usr/bin/perl

use warnings;
use strict;
use Tk;

my $main = MainWindow->new;
$main->Label(-text => 'Hello, world!')->pack;
$main->Button(-text => 'Quit',
              -command => [$main => 'destroy']
              )->pack;

MainLoop;


Sources: perldoc Tk and the comp.lang.perl.tk FAQ