![]() |
![]()
| ![]() |
![]()
NAME"CPS::Governor::Deferred" - iterate at some later point SYNOPSISuse CPS qw( gkforeach ); use CPS::Governor::Deferred; my $gov = CPS::Governor::Deferred->new; gkforeach( $gov, [ 1 .. 10 ], sub { my ( $item, $knext ) = @_; print "A$item "; goto &$knext; }, sub {}, ); gkforeach( $gov, [ 1 .. 10 ], sub { my ( $item, $knext ) = @_; print "B$item "; goto &$knext; }, sub {}, ); $gov->flush; DESCRIPTIONThis CPS::Governor allows the functions using it to delay their iteration until some later point when the containing program invokes it. This allows two main advantages:
These are achieved by having the governor store a list of code references that need to be invoked, rather than invoking them immediately. These references can then be invoked later, perhaps by using an idle watcher in an event framework. Because each code reference hasn't yet been invoked by the time the "again" method is called, the original caller is free to store more pending references with the governor. This allows multiple control functions to be interleaved, as in the "A" and "B" example above. CONSTRUCTOR$gov = CPS::Governor::Deferred->new( %args )Returns a new instance of a "CPS::Governor::Deferred" object. Requires no parameters but may take any of the following to adjust its default behaviour:
METHODS$pending = $gov->is_pendingReturns true if at least one code reference has been stored that hasn't yet been invoked. $gov->prodInvokes all of the currently-stored code references, in the order they were stored. If any new references are stored by these, they will not yet be invoked, but will be available for the next time this method is called. $gov->flushRepeatedly calls "prod" until no more code references are pending. SUBCLASS METHODSThe following methods are used internally to implement the functionality, which may be useful to implementors of subclasses. $gov->later( $code, @args )Used to enqueue the $code ref to be invoked later with the given @args, once it is determined this should be deferred (rather than being invoked immediately in the case of the first few invocations when "defer_after" is set). AUTHORPaul Evans <leonerd@leonerd.org.uk>
|