1use strict; 2use warnings; 3 4package B::Hooks::EndOfScope; 5 6use 5.008000; 7use Variable::Magic; 8 9our $VERSION = '0.08'; 10 11use Sub::Exporter -setup => { 12 exports => ['on_scope_end'], 13 groups => { default => ['on_scope_end'] }, 14}; 15 16=head1 NAME 17 18B::Hooks::EndOfScope - Execute code after a scope finished compilation 19 20=head1 SYNOPSIS 21 22 on_scope_end { ... }; 23 24=head1 DESCRIPTION 25 26This module allows you to execute code when perl finished compiling the 27surrounding scope. 28 29=head1 FUNCTIONS 30 31=head2 on_scope_end 32 33 on_scope_end { ... }; 34 35 on_scope_end $code; 36 37Registers C<$code> to be executed after the surrounding scope has been 38compiled. 39 40This is exported by default. See L<Sub::Exporter> on how to customize it. 41 42=cut 43 44{ 45 my $wiz = Variable::Magic::wizard 46 data => sub { [$_[1]] }, 47 free => sub { $_->() for @{ $_[1] }; () }; 48 49 sub on_scope_end (&) { 50 my $cb = shift; 51 52 $^H |= 0x020000; 53 54 if (my $stack = Variable::Magic::getdata %^H, $wiz) { 55 push @{ $stack }, $cb; 56 } 57 else { 58 Variable::Magic::cast %^H, $wiz, $cb; 59 } 60 } 61} 62 63=head1 SEE ALSO 64 65L<Sub::Exporter> 66 67L<Variable::Magic> 68 69=head1 AUTHOR 70 71Florian Ragwitz E<lt>rafl@debian.orgE<gt> 72 73=head1 COPYRIGHT AND LICENSE 74 75Copyright (c) 2008 Florian Ragwitz 76 77This module is free software. 78 79You may distribute this code under the same terms as Perl itself. 80 81=cut 82 831; 84