sub my_outer(&) { my( $callback ) = @_; my $stash = {}; no warnings 'redefine'; ## closure local *my_inners = sub { ... $stash ... }; local *foo = sub { ... $stash ... }; local *result = sub { ... $stash ... }; return $callback->( $stash ); }