my $btn = Gtk::Button->new("Quit"); $btn->signal_connect(clicked => sub { Gtk->exit(0); return }); $btn->show; my $window = Gtk::Window->new("toplevel"); $window->signal_connect(delete => sub { Gtk->exit(0); return }); $window->set_title("Test"); $window->border_width(15); $window->add($btn); $window->show; #### my $window = configure_object( Gtk::Window->new("toplevel"), signal_connect => [ delete => sub { Gtk->exit(0); return } ], set_title => [ "Test" ], border_width => [ 15 ]; add => [ configure_object( Gtk::Button->new("Quit"), signal_connect => [ clicked => sub { Gtk->exit(0); return } ], show => undef, )], show => undef, ); #### $fileselect->cancel_button->signal_connect( clicked => sub { $fileselect->hide } ); # ... #### configure_object( $fileselect, cancel_button => signal_connect => [ clicked => sub { $fileselect->hide }, ], # ... ); #### sub configure_object { my $object = shift; while(@_) { my ($meth, $param) = splice @_, 0, 2; my $obj = $object; until((not defined $param) or ref $param) { $obj = $obj->$meth; ($meth, $param) = ($param, shift); } $obj->$meth(@{ $param || [] }); } return $object; }