Help language development. Donate to The Perl Foundation

Actor cpan:LEONT last updated on 2021-04-18
[![Build Status](](


Actor - an actor model threading library


use v6.d;
use Actor;

my $actor = spawn {
        -> Str $message, Actor::Handle $other {
            say "Message $message";
        -> Int :$number, Str :$message {
            say "Message $message" if $number %% 7;
        -> "stop" {

$actor.send("message", self-handle);
    -> Str $message {
        $actor.send(:42number, :$message);

await $actor;


Actor is a module that implements actor model threading for Raku.

actors are …


module Actor

### spawn(&starter, *@args, Bool :$monitored --> Handle:D)

This starts a new actor that calls `&starter` with `@args` as its arguments, and returns a handle to that actor. If `$monitored` is true, it will also set up a monitor from the new actor to the current one.

### receive(*@handlers --> Nil)

This will loop through the messages in the queue, and for each message will try to match it in turn to each of the `@handlers` passed to it. If it matches it is taken from the queue and the handler is called with it. Then `receive` returns.

If no such matching message exists, it will wait for a new message to arrive that does match a handler, pushing any non-matching messages to the queue.

### receive-loop(*@handlers --> Nil)

This will call receive in a loop with the given handlers, until one of the handlers calls `last`.

### self-handle(--> Handle:D)

This returns a handle to the current actor.

class Actor::Handle

This class represents a handle to an actor

### send(|message --> Nil)

This will send `|message` to that actor.

### alive(--> Bool:D)

This returns true if the actor is still alive.

### add-monitor(handle = self-handle --> Handle::MonitorId)

This sets up a monitor relationship from the invocant handle to the one passed to `add-monitor` (defaulting to the current handle)

### remove-monitor(Handle::MonitorId $monitor)

This removes a monitor from the monitor list of this actor.


Monitors are watchers on an actor's status. If the actor ends successfully, a message like this is sent:

    (Actor::Exit, $handle, $return-value)

If it dies in an exception, the follow message is sent to the monitoring actor instead.

    (Actor::Error, $handle, $exception)


Leon Timmermans <[email protected]>


Copyright 2020 Leon Timmermans

This library is free software; you can redistribute it and/or modify it under the Artistic License 2.0.