A Proxy is an object that allows you to set a hook that executes whenever a
value is retrieved from a container (FETCH) or when it is set (STORE).
Please note that Proxy can introduce mutability at places where it would
break behavior, e.g. in Hash keys.
To create a container that returns twice what was stored in it, you do something
like this:
sub double() is rw {
my $storage = 0;
Proxy.new(
FETCH => method () { $storage * 2 },
STORE => method ($new) { $storage = $new },
)
}
my $doubled := double();
$doubled = 4;
say $doubled; # OUTPUT: Ā«8ā¤Ā»
Methods
method new
method new(:&FETCH!, :&STORE! --> Proxy:D)
Creates a new Proxy object. &FETCH is called with one argument (the
proxy object) when the value is accessed, and must return the value that the
fetch produces. &STORE is called with two arguments (the proxy object, and
the new value) when a new value is stored in the container.