my $window = call_on_obj(
Gtk2::Window->new( "toplevel" ),
[ signal_connect => ( delete_event => sub { Gtk2->main_quit } ) ],
[ set_title => "Test" ],
[ set_border_width => 15 ],
[ add => call_on_obj(
Gtk2::Button->new( "Quit" ),
[ signal_connect => ( clicked => sub { Gtk2->main_quit } ) ],
) ],
[ 'show_all' ],
);
####
my $window = Gtk2::Window->new( "toplevel" );
$window->signal_connect( delete_event => sub { Gtk2->main_quit } );
$window->set_title( "Test" );
$window->set_border_width( 15 );
$window->add( do {
my $button = Gtk2::Button->new( "Quit" );
$button->signal_connect( clicked => sub { Gtk2->main_quit } );
$button;
} );
$window->show_all();
##
##
use List::Util;
sub call_on_obj {
my( $method, @param );
no warnings 'once';
List::Util::reduce {
( $method, @param ) = @$b;
eval { $a->$method( @param ) };
if( $@ ) { { local $@; require Carp; } Carp::croak( $@ ) }
$a;
} @_;
}