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; } @_; }