From: PerlFAQ Server on
This is an excerpt from the latest version perlfaq3.pod, which
comes with the standard Perl distribution. These postings aim to
reduce the number of repeated questions as well as allow the community
to review and update the answers. The latest version of the complete
perlfaq is at .


3.14: How can I write a GUI (X, Tk, Gtk, etc.) in Perl?

(contributed by Ben Morrow)

There are a number of modules which let you write GUIs in Perl. Most GUI
toolkits have a perl interface: an incomplete list follows.

Tk This works under Unix and Windows, and the current version doesn't
look half as bad under Windows as it used to. Some of the gui
elements still don't 'feel' quite right, though. The interface is
very natural and 'perlish', making it easy to use in small scripts
that just need a simple gui. It hasn't been updated in a while.

Wx This is a Perl binding for the cross-platform wxWidgets toolkit ( ). It works under Unix, Win32 and Mac OS X,
using native widgets (Gtk under Unix). The interface follows the C++
interface closely, but the documentation is a little sparse for
someone who doesn't know the library, mostly just referring you to
the C++ documentation.

Gtk and Gtk2
These are Perl bindings for the Gtk toolkit ( ).
The interface changed significantly between versions 1 and 2 so they
have separate Perl modules. It runs under Unix, Win32 and Mac OS X
(currently it requires an X server on Mac OS, but a 'native' port is
underway), and the widgets look the same on every plaform: i.e.,
they don't match the native widgets. As with Wx, the Perl bindings
follow the C API closely, and the documentation requires you to read
the C documentation to understand it.

This provides access to most of the Win32 GUI widgets from Perl.
Obviously, it only runs under Win32, and uses native widgets. The
Perl interface doesn't really follow the C interface: it's been made
more Perlish, and the documentation is pretty good. More advanced
stuff may require familiarity with the C Win32 APIs, or reference to

CamelBones ( ) is a Perl interface
to Mac OS X's Cocoa GUI toolkit, and as such can be used to produce
native GUIs on Mac OS X. It's not on CPAN, as it requires frameworks
that doesn't know how to install, but installation is via
the standard OSX package installer. The Perl API is, again, very
close to the ObjC API it's wrapping, and the documentation just
tells you how to translate from one to the other.

Qt There is a Perl interface to TrollTech's Qt toolkit, but it does not
appear to be maintained.

Sx is an interface to the Athena widget set which comes with X, but
again it appears not to be much used nowadays.


The perlfaq-workers, a group of volunteers, maintain the perlfaq. They
are not necessarily experts in every domain where Perl might show up,
so please include as much information as possible and relevant in any
corrections. The perlfaq-workers also don't have access to every
operating system or platform, so please include relevant details for
corrections to examples that do not work on particular platforms.
Working code is greatly appreciated.

If you'd like to help maintain the perlfaq, see the details in