package Module::New::Queue; use strict; use warnings; our $QUEUE = []; sub localize { my ($class, $code) = @_; local $QUEUE = []; $code->(); } sub register { my ($class, $code) = @_; push @{ $QUEUE }, $code; } sub consume { my ($class, @args) = @_; while ( my $func = shift @{ $QUEUE } ) { $func->( @args ); } } sub queue { @{ $QUEUE } } sub clear { $QUEUE = [] } 1; __END__ =head1 NAME Module::New::Queue =head1 SYNOPSIS use Module::New::Queue; Module::New::Queue->register(sub { print "global\n" }); Module::New::Queue->localize(sub { Module::New::Queue->register(sub { print "local\n" }); Module::New::Queue->consume(@args); # consume local queue }); Module::New::Queue->consume(@args); # consume global queue =head1 DESCRIPTION Used internally to register commands. =head1 METHODS =head2 localize runs a code reference with a localized queue. =head2 register register a code reference to the queue. =head2 consume consumes the code references in the queue. =head2 queue returns an array of the registered code references. =head2 clear clears the queue. =head1 AUTHOR Kenichi Ishigaki, Eishigaki@cpan.orgE =head1 COPYRIGHT AND LICENSE Copyright (C) 2009 by Kenichi Ishigaki. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut