package ErrorHandling; our $RecordedError; sub error { $RecordedError = [@_]; die; } sub catch(&) { my $code = shift; eval {$code->()}; return $RecordedError; } package Whatever; sub otto { ... error(...) if $fehlerausloeser; ... return $result; } ... sub uwe { ... my $result = otto(...); ... } ... # Irgendwo, wo mich Fehler interessieren: my $status = catch { ... uwe(...); ... }; tuWasDamit($status) if $status;