The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
use Cairo::GObject;
use Glib::Object::Introspection;

Glib::Object::Introspection->setup (
  basename => 'Gtk',
  version => '3.0',
  package => 'Gtk3');
Gtk3::init ([]);

my $window = Gtk3::Window->new ('toplevel');
my $button = Gtk3::Button->new_with_label ('Kazam!');
$window->add ($button);
$window->show_all;

my ($width, undef) = $button->get_preferred_width;
my ($height, undef) = $button->get_preferred_height;
my $surf = Cairo::ImageSurface->create ('argb32', $width,$height);
my $cr = Cairo::Context->create ($surf);

Glib::Idle->add (sub { $button->draw ($cr); Gtk3::main_quit (); });
Gtk3::main ();

$surf->write_to_png ('draw-widget.png');