if ( $outer_cond ) { if ( eval { func(); 1 } ) { do_something(); } } #### else { say "ERR $@"; } #### use Try::Tiny; if ( $outer_cond ) { my $ok = try { func(); 1; # not needed if func() returns something on success } catch { say "ERR $_"; 0; }; $ok ? do_something() : do_something_different(); }