in reply to Exceptions vs Context Objects

This looks like a perfect place for the under-appreciated nonlocal loop control operators, e.g.:
@sources = ( { pre => [sub { print 1; }, sub { print 2; last pre; }, sub { prin +t 3 }], post => [sub { print 4; }, sub { print 5; last source }] }, { pre => [sub { print "badness" }] } ); source: for (@sources) { pre: for (@{$_->{pre}}) { $_->(); } post: for (@{$_->{post}}) { $_->(); } } __END__ 1 2 4 5
Document a good set of labels, and your module will be both convenient to use and educational about Perl's dark corners.