Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Contact Us
Online Help
Domain Status
Man Pages

Virtual Servers

Topology Map

Server Agreement
Year 2038

USA Flag



Man Pages
CPS::Governor(3) User Contributed Perl Documentation CPS::Governor(3)

"CPS::Governor" - control the iteration of the "CPS" functions

Objects based on this abstract class are used by the "gk*" variants of the CPS functions, to control their behavior. These objects are expected to provide a method, "again", which the functions will use to re-invoke iterations of loops, and so on. By providing a different implementation of this method, governor objects can provide such behaviours as rate-limiting, asynchronisation or parallelism, and integration with event-based IO frameworks.

Must be called on a subclass which implements the "again" method. Returns a new instance of a governor object in that class.

Because this is an abstract class, instances of it can only be constructed on a subclass which implements the following methods:

Execute the function given in the "CODE" reference $code, passing in the arguments @args. If this is going to be executed immediately, it should be invoked using a tail-call directly by the "again" method, so that the stack does not grow arbitrarily. This can be achieved by, for example:

 @_ = @args;
 goto &$code;

Alternatively, the Sub::Call::Tail may be used to apply syntactic sugar, allowing you to write instead:

 use Sub::Call::Tail;
 tail $code->( @args );

Consider the following subclass, which implements a "CPS::Governor" subclass that calls "sleep()" between every invocation.

 package Governor::Sleep

 use base qw( CPS::Governor );

 sub new
    my $class = shift;
    my ( $delay ) = @_;

    my $self = $class->SUPER::new;
    $self->{delay} = $delay;

    return $self;

 sub again
    my $self = shift;
    my $code = shift;

    sleep $self->{delay};

    # @args are still in @_
    goto &$code;

Sub::Call::Tail - Tail calls for subroutines and methods

Paul Evans <>
2022-04-08 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.