Venus::Process

Process Class

Process Class for Perl 5

method: async method: await method: chdir method: check method: count method: daemon method: data method: decode method: disengage method: encode method: engage method: exchange method: exit method: followers method: fork method: forks method: future method: is_dyadic method: is_follower method: is_leader method: is_registered method: is_unregistered method: join method: kill method: killall method: leader method: leave method: limit method: others method: others_active method: others_inactive method: poll method: pool method: pid method: pids method: ping method: ppid method: prune method: recall method: recallall method: recv method: recvall method: register method: registrants method: restart method: send method: sendall method: serve method: setsid method: started method: status method: stderr method: stdin method: stdout method: stopped method: sync method: trap method: wait method: waitall method: watch method: watchlist method: work method: works method: unregister method: untrap method: unwatch

package main;

use Venus::Process;

my $parent = Venus::Process->new;

my $process = $parent->fork;

if ($process) {
  # do something in child process ...
  $process->exit;
}
else {
  # do something in parent process ...
  $parent->wait(-1);
}

# $parent->exit;

This package provides methods for handling and forking processes.

Venus::Kind::Utility

Venus::Role::Accessible Venus::Role::Buildable Venus::Role::Explainable Venus::Role::Valuable

The alarm attribute is used in calls to alarm when the process is forked, installing an alarm in the forked process if set.

alarm(number $seconds) (number)

{ since => '2.40', }

=example-1 alarm

# given: synopsis

package main;

my $alarm = $parent->alarm;

# undef

The async method creates a new Venus::Process object and asynchronously runs the callback provided via the "work" method. Both process objects are configured to be are dyadic, i.e. representing an exclusing bi-directoral relationship. Additionally, the callback return value will be automatically made available via the "await" method unless it's undefined. This method returns the newly created "dyadic" process object.

async(coderef $code, any @args) (Venus::Process)

{ since => '3.40', }

The await method expects to operate on a "dyadic" process object and blocks the execution of the current process until a value is received from its couterpart. If a timeout is provided, execution will be blocked until a value is received or the wait time expires. If a timeout of 0 is provided, execution will not be blocked. If no timeout is provided at all, execution will block indefinitely.

await(number $timeout) (arrayref)

{ since => '3.40', }

The chdir method changes the working directory the current process is operating within.

chdir(string $path) (Venus::Process)

{ since => '0.06', }

=example-1 chdir

# given: synopsis;

$parent = $parent->chdir;

# bless({...}, 'Venus::Process')

The check method does a non-blocking "waitpid" in perlfunc operation and returns the wait status. In list context, returns the specified process' exit code (if terminated).

check(number $pid) (number, number)

{ since => '0.06', }

=example-1 check

package main;

use Venus::Process;

my $parent = Venus::Process->new;

my ($process, $pid) = $parent->fork;

if ($process) {
  # in forked process ...
  $process->exit;
}

my $check = $parent->check($pid);

# 0

The count method dispatches to the method specified (or the "watchlist" if not specified) and returns a count of the items returned from the dispatched call.

count(string | coderef $code, any @args) (number)

{ since => '2.40', }

The daemon method detaches the process from controlling terminal and runs it in the background as system daemon. This method internally calls "disengage" and "setsid" and attempts to change the working directory to the root directory.

daemon() (Venus::Process)

{ since => '0.06', }

=example-1 daemon

# given: synopsis;

my $daemon = $parent->daemon; # exits parent immediately

# in forked process ...

# $daemon->exit;

The data method returns the number of messages sent to the current process, from the PID or PIDs provided (if any). If no PID list is provided, the count returned is based on the PIDs returned from "watchlist".

data(number @pids) (number)

{ since => '2.91', }

The decode method accepts a string representation of a Perl value and returns the Perl value.

decode(string $data) (any)

{ since => '2.91', }

The disengage method limits the interactivity of the process by changing the working directory to the root directory and redirecting its standard file descriptors from and to /dev/null, or the OS' equivalent. These state changes can be undone by calling the "engage" method.

disengage() (Venus::Process)

{ since => '0.06', }

=example-1 disengage

# given: synopsis;

$parent = $parent->disengage;

# bless({...}, 'Venus::Process')

The encode method accepts a Perl value and returns a string representation of that Perl value.

encode(any $data) (string)

{ since => '2.91', }

The engage method ensures the interactivity of the process by changing the working directory to the directory used to launch the process, and by redirecting/returning its standard file descriptors from and to their defaults. This method effectively does the opposite of the "disengage" method.

engage() (Venus::Process)

{ since => '0.06', }

=example-1 engage

# given: synopsis;

$parent = $parent->engage;

# bless({...}, 'Venus::Process')

The exchange method gets and/or sets the name of the data exchange. The exchange is the ontext in which processes can register and cooperate. Process can cooperate in different exchanges (or contexts) and messages sent to a process in one context are not available to be retrieved will operating in another exchange (or context).

exchange(string $name) (any)

{ since => '2.91', }

The exit method exits the program immediately.

exit(number $status) (number)

{ since => '0.06', }

=example-1 exit

# given: synopsis;

my $exit = $parent->exit;

# 0

The followers method returns the list of PIDs registered under the current "exchange" who are not the "leader".

followers() (arrayref)

{ since => '2.91', }

The fork method calls the system "fork" in perlfunc function and creates a new process running the same program at the same point (or call site). This method returns a new Venus::Process object representing the child process (from within the execution of the child process (or fork)), and returns undef to the parent (or originating) process. In list context, this method returns both the process and PID (or process ID) of the child process. If a callback or argument is provided it will be executed in the child process.

fork(string | coderef $code, any @args) (Venus::Process, number)

{ since => '0.06', }

=example-1 fork

# given: synopsis;

$process = $parent->fork;

# if ($process) {
#   # in forked process ...
#   $process->exit;
# }
# else {
#   # in parent process ...
#   $parent->wait(-1);
# }

# in child process

# bless({...}, 'Venus::Process')

The forks method creates multiple forks by calling the "fork" method n times, based on the count specified. As with the "fork" method, this method returns a new Venus::Process object representing the child process (from within the execution of the child process (or fork)), and returns undef to the parent (or originating) process. In list context, this method returns both the process and an arrayref of PID values (or process IDs) for each of the child processes created. If a callback or argument is provided it will be executed in each child process.

forks(string | coderef $code, any @args) (Venus::Process, within[arrayref, number])

{ since => '0.06', }

=example-1 forks

# given: synopsis;

$process = $parent->forks(5);

# if ($process) {
#   # do something in (each) forked process ...
#   $process->exit;
# }
# else {
#   # do something in parent process ...
#   $parent->wait(-1);
# }

# bless({...}, 'Venus::Process')

The future method creates a new object via "async" which runs the callback asynchronously and returns a Venus::Future object with a promise which eventually resolves to the value emitted or error raised.

future(coderef $code, any @args) (Venus::Future)

{ since => '3.55', }

The is_dyadic method returns true is the process is configured to exclusively communicate with one other process, otherwise returns false.

is_dyadic() (boolean)

{ since => '3.40', }

The is_follower method returns true if the process is not the "leader", otherwise returns false.

is_follower() (boolean)

{ since => '2.91', }

The is_leader method returns true if the process is the "leader", otherwise returns false.

is_leader() (boolean)

{ since => '2.91', }

The is_registered method returns true if the process has registered using the "register" method, otherwise returns false.

is_registered() (boolean)

{ since => '2.91', }

The is_unregistered method returns true if the process has unregistered using the "unregister" method, or had never registered at all, otherwise returns false.

is_unregistered() (boolean)

{ since => '2.91', }

The join method sets the "exchange", registers the process with the exchange using "register", and clears the "watchlist", then returns the invocant.

join(string $name) (Venus::Process)

{ since => '2.91', }

The kill method calls the system "kill" in perlfunc function which sends a signal to a list of processes and returns truthy or falsy. Note: A truthy result doesn't necessarily mean all processes were successfully signalled.

kill(string $signal, number @pids) (number)

{ since => '0.06', }

=example-1 kill

# given: synopsis;

if ($process = $parent->fork) {
  # in forked process ...
  $process->exit;
}

my $kill = $parent->kill('term', int $process);

# 1

The killall method accepts a list of PIDs (or uses the "watchlist" if not provided) and returns the result of calling the "kill" method for each PID. Returns a list in list context.

killall(string $name, number @pids) (arrayref)

{ since => '2.40', }

The leader method uses a simple leader election algorithm to determine the process leader and returns the PID for that process. The leader is always the lowest value active PID (i.e. that responds to "ping").

leader() (number)

{ since => '2.91', }

The leave method sets the "exchange" to undefined, unregisters the process using "unregister", and clears the "watchlist", then returns the invocant.

leave(string $name) (Venus::Process)

{ since => '2.91', }

The limit method blocks the execution of the current process until the number of processes in the "watchlist" falls bellow the count specified. The method returns true once execution continues if execution was blocked, and false if the limit has yet to be reached.

limit(number $count) (boolean)

{ since => '3.40', }

The others method returns all "registrants" other than the current process, i.e. all other registered process PIDs whether active or inactive.

others() (arrayref)

{ since => '2.91', }

The others_active method returns all "registrants" other than the current process which are active, i.e. all other registered process PIDs that responds to "ping".

others_active() (arrayref)

{ since => '2.91', }

The others_inactive method returns all "registrants" other than the current process which are inactive, i.e. all other registered process PIDs that do not respond to "ping".

others_inactive() (arrayref)

{ since => '2.91', }

The poll method continuously calls the named method or coderef and returns the result that's not undefined, or throws an exception on timeout. If no method name is provided this method will default to calling "recvall".

poll(number $timeout, string | coderef $code, any @args) (arrayref)

{ since => '2.91', }

The pool method blocks the execution of the current process until the number of "other" processes are registered and pingable. This method returns the invocant when successful, or throws an exception if the operation timed out.

pool(number $count, number $timeout) (Venus::Process)

{ since => '2.91', }

The pid method returns the PID of the current process.

pid() (number)

{ since => '2.40', }

The pids method returns the PID of the current process, and the PIDs of any child processes.

pids() (arrayref)

{ since => '2.40', }

The ping method returns truthy if the process of the PID provided is active. If multiple PIDs are provided, this method will return the count of active PIDs.

ping(number @pids) (number)

{ since => '2.01', }

=example-1 ping

# given: synopsis;

if ($process = $parent->fork) {
  # in forked process ...
  $process->exit;
}

my $ping = $parent->ping(int $process);

# 1

The ppid method returns the PID of the parent process (i.e. the process which forked the current process, if any).

ppid() (number)

{ since => '2.91', }

The prune method removes all stopped processes and returns the invocant.

prune() (Venus::Process)

{ since => '2.40', }

The recall method returns the earliest message, sent by the current process to the process specified by the PID provided, which is no longer active (i.e. responding to "ping").

recall(number $pid) (any)

{ since => '2.91', }

The recallall method performs a "recall" on the parent process (if any) via "ppid" and any process listed in the "watchlist", and returns the results.

recallall() (arrayref)

{ since => '2.91', }

The recv method returns the earliest message found from the process specified by the PID provided.

recv(number $pid) (any)

{ since => '2.91', }

The recvall method performs a "recv" on the parent process (if any) via "ppid" and any process listed in the "watchlist", and returns the results.

recvall() (arrayref)

{ since => '2.91', }

The register method declares that the process is willing to cooperate with others (e.g. "send" nad "recv" messages), in a way that's discoverable by other processes, and returns the invocant.

register() (Venus::Process)

{ since => '2.91', }

The registrants method returns the PIDs for all the processes that registered using the "register" method whether they're currently active or not.

registrants() (arrayref)

{ since => '2.91', }

The restart method executes the callback provided for each PID returned by the "stopped" method, passing the pid and the results of "check" to the callback as arguments, and returns the result of each call as an arrayref. In list context, this method returns a list.

restart(coderef $callback) (arrayref)

{ since => '2.40', }

The send method makes the data provided available to the process specified by the PID provided.

send(number $pid, any $data) (Venus::Process)

{ since => '2.91', }

The sendall method performs a "send" on the parent process (if any) via "ppid" and any process listed in the "watchlist", and returns the invocant.

sendall(any $data) (Venus::Process)

{ since => '2.91', }

The serve method executes the callback using "work" until "limit" blocks the execution of the current process, indefinitely. It has the effect of serving the callback and maintaining the desired number of forks until killed or gracefully shutdown.

serve(number $count, coderef $callback) (Venus::Process)

{ since => '3.40', }

The setsid method calls the "setsid" in POSIX function and sets the process group identifier of the current process.

setsid() (number)

{ since => '0.06', }

=example-1 setsid

# given: synopsis;

my $setsid = $parent->setsid;

# 1

The started method returns a list of PIDs whose processes have been started and which have not terminated. Returns a list in list context.

started() (arrayref)

{ since => '2.40', }

The status method executes the callback provided for each PID in the "watchlist", passing the pid and the results of "check" to the callback as arguments, and returns the result of each call as an arrayref. In list context, this method returns a list.

status(coderef $callback) (arrayref)

{ since => '2.40', }

The stderr method redirects STDERR to the path provided, typically /dev/null or some equivalent. If called with no arguments STDERR will be restored to its default.

stderr(string $path) (Venus::Process)

{ since => '0.06', }

=example-1 stderr

# given: synopsis;

$parent = $parent->stderr;

# bless({...}, 'Venus::Process')

The stdin method redirects STDIN to the path provided, typically /dev/null or some equivalent. If called with no arguments STDIN will be restored to its default.

stdin(string $path) (Venus::Process)

{ since => '0.06', }

=example-1 stdin

# given: synopsis;

$parent = $parent->stdin;

# bless({...}, 'Venus::Process')

The stdout method redirects STDOUT to the path provided, typically /dev/null or some equivalent. If called with no arguments STDOUT will be restored to its default.

stdout(string $path) (Venus::Process)

{ since => '0.06', }

=example-1 stdout

# given: synopsis;

$parent = $parent->stdout;

# bless({...}, 'Venus::Process')

The stopped method returns a list of PIDs whose processes have terminated. Returns a list in list context.

stopped() (arrayref)

{ since => '2.40', }

The sync method blocks the execution of the current process until the number of "other" processes are registered, pingable, and have each sent at-least one message to the current process. This method returns the invocant when successful, or throws an exception if the operation timed out.

sync(number $count, number $timeout) (Venus::Process)

{ since => '2.91', }

The trap method registers a process signal trap (or callback) which will be invoked whenever the current process receives that matching signal. The signal traps are globally installed and will overwrite any preexisting behavior. Signal traps are inherited by child processes (or forks) but can be overwritten using this method, or reverted to the default behavior by using the "untrap" method.

trap(string $name, string | coderef $expr) (Venus::Process)

{ since => '0.06', }

=example-1 trap

# given: synopsis;

$parent = $parent->trap(term => sub{
  die 'Something failed!';
});

# bless({...}, 'Venus::Process')

The wait method does a blocking "waitpid" in perlfunc operation and returns the wait status. In list context, returns the specified process' exit code (if terminated).

wait(number $pid) (number, number)

{ since => '0.06', }

=example-1 wait

package main;

use Venus::Process;

my $parent = Venus::Process->new;

my ($process, $pid) = $parent->fork;

if ($process) {
  # in forked process ...
  $process->exit;
}

my $wait = $parent->wait($pid);

# 0

The waitall method does a blocking "wait" call for all processes based on the PIDs provided (or the PIDs returned by "watchlist" if not provided) and returns an arrayref of results from calling "wait" on each PID. Returns a list in list context.

waitall(number @pids) (arrayref)

{ since => '2.40', }

The watch method records PIDs to be watched, e.g. using the "status" method and returns all PIDs being watched. Returns a list in list context.

watch(number @pids) (arrayref)

{ since => '2.40', }

The watchlist method returns the recorded PIDs. Returns a list in list context.

watchlist() (arrayref)

{ since => '2.40', }

The work method forks the current process, runs the callback provided in the child process, and immediately exits after. This method returns the PID of the child process. It is recommended to install an "alarm" in perlfunc in the child process (i.e. callback) to avoid creating zombie processes in situations where the parent process might exit before the child process is done working.

work(string | coderef $code, any @args) (number)

{ since => '0.06', }

=example-1 work

# given: synopsis;

my $pid = $parent->work(sub{
  my ($process) = @_;
  # in forked process ...
  $process->exit;
});

# $pid

The works method creates multiple forks by calling the "work" method n times, based on the count specified. The works method runs the callback provided in the child process, and immediately exits after with an exit code of 0 by default. This method returns the PIDs of the child processes. It is recommended to install an "alarm" in perlfunc in the child process (i.e. callback) to avoid creating zombie processes in situations where the parent process might exit before the child process is done working.

works(number $count, coderef $callback, any @args) (arrayref)

{ since => '2.40', }

The unregister method declares that the process is no longer willing to cooperate with others (e.g. "send" nad "recv" messages), and will no longer be discoverable by other processes, and returns the invocant.

unregister() (Venus::Process)

{ since => '2.91', }

The untrap method restores the process signal trap specified to its default behavior. If called with no arguments, it restores all signal traps overwriting any user-defined signal traps in the current process.

untrap(string $name) (Venus::Process)

{ since => '0.06', }

=example-1 untrap

# given: synopsis;

$parent->trap(chld => 'ignore')->trap(term => sub{
  die 'Something failed!';
});

$parent = $parent->untrap('term');

# bless({...}, 'Venus::Process')

The unwatch method removes the PIDs provided from the watchlist and returns the list of PIDs remaining to be watched. In list context returns a list.

unwatch(number @pids) (arrayref)

{ since => '2.40', }

This package overloads the "" operator.

This package overloads the ~~ operator.

This package may raise an error_on_chdir exception.

This package may raise an error_on_fork_process exception.

This package may raise an error_on_fork_support exception.

This package may raise an error_on_ping exception.

This package may raise an error_on_setid exception.

This package may raise an error_on_stderr exception.

This package may raise an error_on_stdin exception.

This package may raise an error_on_stdout exception.

This package may raise an error_on_timeout_poll exception.

This package may raise an error_on_timeout_pool exception.

This package may raise an error_on_timeout_sync exception.

t/Venus.t: present: authors t/Venus.t: present: license

361 POD Errors

The following errors were encountered while parsing the POD:

Around line 180:

Unknown directive: =name

Around line 188:

Unknown directive: =tagline

Around line 196:

Unknown directive: =abstract

Around line 204:

Unknown directive: =includes

Around line 277:

Unknown directive: =synopsis

Around line 308:

Unknown directive: =description

Around line 316:

Unknown directive: =inherits

Around line 324:

Unknown directive: =integrates

Around line 335:

Unknown directive: =attribute

Around line 340:

Unknown directive: =signature

Around line 344:

Unknown directive: =metadata

Around line 380:

=cut found outside a pod block. Skipping to next block.

Around line 390:

Unknown directive: =method

Around line 399:

Unknown directive: =signature

Around line 403:

Unknown directive: =metadata

Around line 423:

=cut found outside a pod block. Skipping to next block.

Around line 434:

Unknown directive: =method

Around line 443:

Unknown directive: =signature

Around line 447:

Unknown directive: =metadata

Around line 469:

=cut found outside a pod block. Skipping to next block.

Around line 497:

=cut found outside a pod block. Skipping to next block.

Around line 525:

=cut found outside a pod block. Skipping to next block.

Around line 553:

=cut found outside a pod block. Skipping to next block.

Around line 600:

=cut found outside a pod block. Skipping to next block.

Around line 614:

Unknown directive: =method

Around line 619:

Unknown directive: =signature

Around line 623:

Unknown directive: =metadata

Around line 654:

=cut found outside a pod block. Skipping to next block.

Around line 671:

=cut found outside a pod block. Skipping to next block.

Around line 686:

Unknown directive: =method

Around line 692:

Unknown directive: =signature

Around line 696:

Unknown directive: =metadata

Around line 752:

=cut found outside a pod block. Skipping to next block.

Around line 783:

=cut found outside a pod block. Skipping to next block.

Around line 795:

Unknown directive: =method

Around line 801:

Unknown directive: =signature

Around line 805:

Unknown directive: =metadata

Around line 825:

=cut found outside a pod block. Skipping to next block.

Around line 849:

=cut found outside a pod block. Skipping to next block.

Around line 873:

=cut found outside a pod block. Skipping to next block.

Around line 883:

Unknown directive: =method

Around line 889:

Unknown directive: =signature

Around line 893:

Unknown directive: =metadata

Around line 920:

Unknown directive: =method

Around line 926:

Unknown directive: =signature

Around line 930:

Unknown directive: =metadata

Around line 948:

=cut found outside a pod block. Skipping to next block.

Around line 1009:

=cut found outside a pod block. Skipping to next block.

Around line 1093:

=cut found outside a pod block. Skipping to next block.

Around line 1125:

Unknown directive: =method

Around line 1130:

Unknown directive: =signature

Around line 1134:

Unknown directive: =metadata

Around line 1152:

=cut found outside a pod block. Skipping to next block.

Around line 1162:

Unknown directive: =method

Around line 1169:

Unknown directive: =signature

Around line 1173:

Unknown directive: =metadata

Around line 1196:

Unknown directive: =method

Around line 1201:

Unknown directive: =signature

Around line 1205:

Unknown directive: =metadata

Around line 1223:

=cut found outside a pod block. Skipping to next block.

Around line 1233:

Unknown directive: =method

Around line 1240:

Unknown directive: =signature

Around line 1244:

Unknown directive: =metadata

Around line 1267:

Unknown directive: =method

Around line 1275:

Unknown directive: =signature

Around line 1279:

Unknown directive: =metadata

Around line 1297:

=cut found outside a pod block. Skipping to next block.

Around line 1317:

=cut found outside a pod block. Skipping to next block.

Around line 1341:

=cut found outside a pod block. Skipping to next block.

Around line 1351:

Unknown directive: =method

Around line 1355:

Unknown directive: =signature

Around line 1359:

Unknown directive: =metadata

Around line 1392:

=cut found outside a pod block. Skipping to next block.

Around line 1403:

Unknown directive: =method

Around line 1408:

Unknown directive: =signature

Around line 1412:

Unknown directive: =metadata

Around line 1430:

=cut found outside a pod block. Skipping to next block.

Around line 1464:

=cut found outside a pod block. Skipping to next block.

Around line 1477:

Unknown directive: =method

Around line 1487:

Unknown directive: =signature

Around line 1491:

Unknown directive: =metadata

Around line 1549:

=cut found outside a pod block. Skipping to next block.

Around line 1584:

=cut found outside a pod block. Skipping to next block.

Around line 1609:

=cut found outside a pod block. Skipping to next block.

Around line 1642:

=cut found outside a pod block. Skipping to next block.

Around line 1656:

Unknown directive: =method

Around line 1667:

Unknown directive: =signature

Around line 1671:

Unknown directive: =metadata

Around line 1727:

=cut found outside a pod block. Skipping to next block.

Around line 1766:

=cut found outside a pod block. Skipping to next block.

Around line 1778:

Unknown directive: =method

Around line 1784:

Unknown directive: =signature

Around line 1788:

Unknown directive: =metadata

Around line 1808:

=cut found outside a pod block. Skipping to next block.

Around line 1838:

=cut found outside a pod block. Skipping to next block.

Around line 1873:

=cut found outside a pod block. Skipping to next block.

Around line 1908:

=cut found outside a pod block. Skipping to next block.

Around line 1947:

=cut found outside a pod block. Skipping to next block.

Around line 1964:

Unknown directive: =method

Around line 1969:

Unknown directive: =signature

Around line 1973:

Unknown directive: =metadata

Around line 1993:

=cut found outside a pod block. Skipping to next block.

Around line 2018:

=cut found outside a pod block. Skipping to next block.

Around line 2032:

Unknown directive: =method

Around line 2037:

Unknown directive: =signature

Around line 2041:

Unknown directive: =metadata

Around line 2061:

=cut found outside a pod block. Skipping to next block.

Around line 2094:

=cut found outside a pod block. Skipping to next block.

Around line 2130:

=cut found outside a pod block. Skipping to next block.

Around line 2144:

Unknown directive: =method

Around line 2149:

Unknown directive: =signature

Around line 2153:

Unknown directive: =metadata

Around line 2173:

=cut found outside a pod block. Skipping to next block.

Around line 2206:

=cut found outside a pod block. Skipping to next block.

Around line 2242:

=cut found outside a pod block. Skipping to next block.

Around line 2256:

Unknown directive: =method

Around line 2261:

Unknown directive: =signature

Around line 2265:

Unknown directive: =metadata

Around line 2285:

=cut found outside a pod block. Skipping to next block.

Around line 2308:

=cut found outside a pod block. Skipping to next block.

Around line 2320:

Unknown directive: =method

Around line 2326:

Unknown directive: =signature

Around line 2330:

Unknown directive: =metadata

Around line 2350:

=cut found outside a pod block. Skipping to next block.

Around line 2373:

=cut found outside a pod block. Skipping to next block.

Around line 2397:

=cut found outside a pod block. Skipping to next block.

Around line 2409:

Unknown directive: =method

Around line 2414:

Unknown directive: =signature

Around line 2418:

Unknown directive: =metadata

Around line 2438:

=cut found outside a pod block. Skipping to next block.

Around line 2463:

=cut found outside a pod block. Skipping to next block.

Around line 2476:

Unknown directive: =method

Around line 2482:

Unknown directive: =signature

Around line 2486:

Unknown directive: =metadata

Around line 2518:

Unknown directive: =method

Around line 2524:

Unknown directive: =signature

Around line 2528:

Unknown directive: =metadata

Around line 2551:

=cut found outside a pod block. Skipping to next block.

Around line 2579:

=cut found outside a pod block. Skipping to next block.

Around line 2592:

Unknown directive: =method

Around line 2598:

Unknown directive: =signature

Around line 2602:

Unknown directive: =metadata

Around line 2620:

=cut found outside a pod block. Skipping to next block.

Around line 2654:

=cut found outside a pod block. Skipping to next block.

Around line 2677:

=cut found outside a pod block. Skipping to next block.

Around line 2687:

Unknown directive: =method

Around line 2692:

Unknown directive: =signature

Around line 2696:

Unknown directive: =metadata

Around line 2716:

=cut found outside a pod block. Skipping to next block.

Around line 2741:

=cut found outside a pod block. Skipping to next block.

Around line 2754:

Unknown directive: =method

Around line 2761:

Unknown directive: =signature

Around line 2765:

Unknown directive: =metadata

Around line 2791:

=cut found outside a pod block. Skipping to next block.

Around line 2822:

=cut found outside a pod block. Skipping to next block.

Around line 2836:

Unknown directive: =method

Around line 2841:

Unknown directive: =signature

Around line 2845:

Unknown directive: =metadata

Around line 2863:

=cut found outside a pod block. Skipping to next block.

Around line 2897:

=cut found outside a pod block. Skipping to next block.

Around line 2910:

Unknown directive: =method

Around line 2916:

Unknown directive: =signature

Around line 2920:

Unknown directive: =metadata

Around line 2952:

=cut found outside a pod block. Skipping to next block.

Around line 2966:

Unknown directive: =method

Around line 2972:

Unknown directive: =signature

Around line 2976:

Unknown directive: =metadata

Around line 3008:

=cut found outside a pod block. Skipping to next block.

Around line 3022:

Unknown directive: =method

Around line 3028:

Unknown directive: =signature

Around line 3032:

Unknown directive: =metadata

Around line 3050:

=cut found outside a pod block. Skipping to next block.

Around line 3070:

=cut found outside a pod block. Skipping to next block.

Around line 3090:

=cut found outside a pod block. Skipping to next block.

Around line 3114:

=cut found outside a pod block. Skipping to next block.

Around line 3124:

Unknown directive: =method

Around line 3130:

Unknown directive: =signature

Around line 3134:

Unknown directive: =metadata

Around line 3162:

=cut found outside a pod block. Skipping to next block.

Around line 3200:

=cut found outside a pod block. Skipping to next block.

Around line 3239:

=cut found outside a pod block. Skipping to next block.

Around line 3254:

Unknown directive: =method

Around line 3258:

Unknown directive: =signature

Around line 3262:

Unknown directive: =metadata

Around line 3282:

=cut found outside a pod block. Skipping to next block.

Around line 3292:

Unknown directive: =method

Around line 3297:

Unknown directive: =signature

Around line 3301:

Unknown directive: =metadata

Around line 3321:

=cut found outside a pod block. Skipping to next block.

Around line 3345:

=cut found outside a pod block. Skipping to next block.

Around line 3355:

Unknown directive: =method

Around line 3360:

Unknown directive: =signature

Around line 3364:

Unknown directive: =metadata

Around line 3396:

Unknown directive: =method

Around line 3401:

Unknown directive: =signature

Around line 3405:

Unknown directive: =metadata

Around line 3421:

=cut found outside a pod block. Skipping to next block.

Around line 3443:

=cut found outside a pod block. Skipping to next block.

Around line 3454:

Unknown directive: =method

Around line 3458:

Unknown directive: =signature

Around line 3462:

Unknown directive: =metadata

Around line 3484:

=cut found outside a pod block. Skipping to next block.

Around line 3516:

=cut found outside a pod block. Skipping to next block.

Around line 3548:

=cut found outside a pod block. Skipping to next block.

Around line 3562:

Unknown directive: =method

Around line 3568:

Unknown directive: =signature

Around line 3572:

Unknown directive: =metadata

Around line 3604:

=cut found outside a pod block. Skipping to next block.

Around line 3619:

Unknown directive: =method

Around line 3624:

Unknown directive: =signature

Around line 3628:

Unknown directive: =metadata

Around line 3668:

=cut found outside a pod block. Skipping to next block.

Around line 3684:

Unknown directive: =method

Around line 3689:

Unknown directive: =signature

Around line 3693:

Unknown directive: =metadata

Around line 3711:

=cut found outside a pod block. Skipping to next block.

Around line 3751:

=cut found outside a pod block. Skipping to next block.

Around line 3761:

Unknown directive: =method

Around line 3766:

Unknown directive: =signature

Around line 3770:

Unknown directive: =metadata

Around line 3806:

=cut found outside a pod block. Skipping to next block.

Around line 3858:

=cut found outside a pod block. Skipping to next block.

Around line 3872:

Unknown directive: =method

Around line 3878:

Unknown directive: =signature

Around line 3882:

Unknown directive: =metadata

Around line 3900:

=cut found outside a pod block. Skipping to next block.

Around line 3911:

Unknown directive: =method

Around line 3916:

Unknown directive: =signature

Around line 3920:

Unknown directive: =metadata

Around line 3952:

=cut found outside a pod block. Skipping to next block.

Around line 3962:

Unknown directive: =method

Around line 3969:

Unknown directive: =signature

Around line 3973:

Unknown directive: =metadata

Around line 3999:

=cut found outside a pod block. Skipping to next block.

Around line 4012:

Unknown directive: =method

Around line 4017:

Unknown directive: =signature

Around line 4021:

Unknown directive: =metadata

Around line 4039:

=cut found outside a pod block. Skipping to next block.

Around line 4077:

=cut found outside a pod block. Skipping to next block.

Around line 4089:

Unknown directive: =method

Around line 4094:

Unknown directive: =signature

Around line 4098:

Unknown directive: =metadata

Around line 4132:

=cut found outside a pod block. Skipping to next block.

Around line 4152:

Unknown directive: =method

Around line 4159:

Unknown directive: =signature

Around line 4163:

Unknown directive: =metadata

Around line 4189:

=cut found outside a pod block. Skipping to next block.

Around line 4221:

=cut found outside a pod block. Skipping to next block.

Around line 4235:

Unknown directive: =method

Around line 4240:

Unknown directive: =signature

Around line 4244:

Unknown directive: =metadata

Around line 4275:

=cut found outside a pod block. Skipping to next block.

Around line 4287:

Unknown directive: =method

Around line 4292:

Unknown directive: =signature

Around line 4296:

Unknown directive: =metadata

Around line 4316:

=cut found outside a pod block. Skipping to next block.

Around line 4338:

=cut found outside a pod block. Skipping to next block.

Around line 4349:

Unknown directive: =method

Around line 4356:

Unknown directive: =signature

Around line 4360:

Unknown directive: =metadata

Around line 4387:

=cut found outside a pod block. Skipping to next block.

Around line 4419:

=cut found outside a pod block. Skipping to next block.

Around line 4451:

=cut found outside a pod block. Skipping to next block.

Around line 4464:

Unknown directive: =method

Around line 4470:

Unknown directive: =signature

Around line 4474:

Unknown directive: =metadata

Around line 4506:

=cut found outside a pod block. Skipping to next block.

Around line 4518:

Unknown directive: =method

Around line 4524:

Unknown directive: =signature

Around line 4528:

Unknown directive: =metadata

Around line 4560:

=cut found outside a pod block. Skipping to next block.

Around line 4572:

Unknown directive: =method

Around line 4578:

Unknown directive: =signature

Around line 4582:

Unknown directive: =metadata

Around line 4614:

=cut found outside a pod block. Skipping to next block.

Around line 4626:

Unknown directive: =method

Around line 4631:

Unknown directive: =signature

Around line 4635:

Unknown directive: =metadata

Around line 4655:

=cut found outside a pod block. Skipping to next block.

Around line 4678:

=cut found outside a pod block. Skipping to next block.

Around line 4689:

Unknown directive: =method

Around line 4696:

Unknown directive: =signature

Around line 4700:

Unknown directive: =metadata

Around line 4730:

=cut found outside a pod block. Skipping to next block.

Around line 4772:

=cut found outside a pod block. Skipping to next block.

Around line 4815:

=cut found outside a pod block. Skipping to next block.

Around line 4830:

Unknown directive: =method

Around line 4839:

Unknown directive: =signature

Around line 4843:

Unknown directive: =metadata

Around line 4870:

Unknown directive: =method

Around line 4876:

Unknown directive: =signature

Around line 4880:

Unknown directive: =metadata

Around line 4936:

=cut found outside a pod block. Skipping to next block.

Around line 4967:

=cut found outside a pod block. Skipping to next block.

Around line 4979:

Unknown directive: =method

Around line 4986:

Unknown directive: =signature

Around line 4990:

Unknown directive: =metadata

Around line 5010:

=cut found outside a pod block. Skipping to next block.

Around line 5032:

=cut found outside a pod block. Skipping to next block.

Around line 5063:

=cut found outside a pod block. Skipping to next block.

Around line 5076:

Unknown directive: =method

Around line 5081:

Unknown directive: =signature

Around line 5085:

Unknown directive: =metadata

Around line 5105:

=cut found outside a pod block. Skipping to next block.

Around line 5127:

=cut found outside a pod block. Skipping to next block.

Around line 5149:

=cut found outside a pod block. Skipping to next block.

Around line 5173:

=cut found outside a pod block. Skipping to next block.

Around line 5195:

=cut found outside a pod block. Skipping to next block.

Around line 5205:

Unknown directive: =method

Around line 5209:

Unknown directive: =signature

Around line 5213:

Unknown directive: =metadata

Around line 5233:

=cut found outside a pod block. Skipping to next block.

Around line 5257:

=cut found outside a pod block. Skipping to next block.

Around line 5267:

Unknown directive: =method

Around line 5275:

Unknown directive: =signature

Around line 5279:

Unknown directive: =metadata

Around line 5308:

Unknown directive: =method

Around line 5318:

Unknown directive: =signature

Around line 5322:

Unknown directive: =metadata

Around line 5342:

=cut found outside a pod block. Skipping to next block.

Around line 5359:

Unknown directive: =method

Around line 5365:

Unknown directive: =signature

Around line 5369:

Unknown directive: =metadata

Around line 5387:

=cut found outside a pod block. Skipping to next block.

Around line 5398:

Unknown directive: =method

Around line 5404:

Unknown directive: =signature

Around line 5408:

Unknown directive: =metadata

Around line 5450:

=cut found outside a pod block. Skipping to next block.

Around line 5462:

Unknown directive: =method

Around line 5467:

Unknown directive: =signature

Around line 5471:

Unknown directive: =metadata

Around line 5491:

=cut found outside a pod block. Skipping to next block.

Around line 5515:

=cut found outside a pod block. Skipping to next block.

Around line 5539:

=cut found outside a pod block. Skipping to next block.

Around line 5549:

Unknown directive: =operator

Around line 5565:

=cut found outside a pod block. Skipping to next block.

Around line 5574:

Unknown directive: =operator

Around line 5590:

=cut found outside a pod block. Skipping to next block.

Around line 5596:

Unknown directive: =error

Around line 5633:

=cut found outside a pod block. Skipping to next block.

Around line 5651:

Unknown directive: =error

Around line 5683:

=cut found outside a pod block. Skipping to next block.

Around line 5699:

Unknown directive: =error

Around line 5730:

=cut found outside a pod block. Skipping to next block.

Around line 5746:

Unknown directive: =error

Around line 5777:

=cut found outside a pod block. Skipping to next block.

Around line 5793:

Unknown directive: =error

Around line 5825:

=cut found outside a pod block. Skipping to next block.

Around line 5841:

Unknown directive: =error

Around line 5878:

=cut found outside a pod block. Skipping to next block.

Around line 5896:

Unknown directive: =error

Around line 5933:

=cut found outside a pod block. Skipping to next block.

Around line 5951:

Unknown directive: =error

Around line 5988:

=cut found outside a pod block. Skipping to next block.

Around line 6006:

Unknown directive: =error

Around line 6050:

=cut found outside a pod block. Skipping to next block.

Around line 6072:

Unknown directive: =error

Around line 6116:

=cut found outside a pod block. Skipping to next block.

Around line 6138:

Unknown directive: =error

Around line 6182:

=cut found outside a pod block. Skipping to next block.

Around line 6204:

Unknown directive: =partials