sub try (&@) { print "try();\n"; my($try,$catch) = @_; eval { &$try }; if ($@) { local $_ = $@; &$catch; } } sub catch (&) { print "catch();\n"; $_[0] } try { die "foobar\n"; print "OK"; } catch { print "FAILED!\n"; };