sub interface_sub { try { internal_sub1($arg1, $arg2); } catch Error with { my $E = shift; throw Error::Simple($E); }; try { internal_sub2($arg1, $arg2, $arg3); } catch Error with { my $E = shift; throw Error::Simple($E); }; } #### sub exec_internal_sub { my ($sub_ref, @sub_args) = @_; try { $sub_ref->(@sub_args); } catch { my $E = shift; throw Error::Simple($E); }; } sub interface_sub { exec_internal_sub(\&internal_sub1, $arg1, $arg2); exec_internal_sub(\&internal_sub2, $arg1, $arg2, $arg3); }