NAME
slot - Fast global reactive state slots with optional watchers
SYNOPSIS
# Define and use slots
package Config;
use slot qw(app_name debug);
app_name("MyApp");
debug(1);
# Access from another package (same underlying storage)
package Service;
use slot qw(app_name);
print app_name(); # "MyApp"
app_name("Changed");
# Lvalue assignment
app_name() = "NewName";
app_name()++;
# Watchers (reactive)
slot::watch('app_name', sub {
my ($name, $value) = @_;
print "app_name changed to: $value\n";
});
slot::unwatch('app_name'); # Remove all watchers
DESCRIPTION
slot provides fast, globally-shared named storage slots with XS performance. Slots are shared across all packages - importing the same slot name in different packages gives access to the same underlying value.
Key features:
Fast - XS implementation, ~50M ops/sec (faster than Moo accessors)
Global - Slots are shared across packages by name
Reactive - Optional watchers fire on value changes
Lazy watchers - No overhead unless you use
watch()
FUNCTIONS
import
use slot qw(foo bar baz);
Imports slot accessors into the calling package. Each accessor is both a getter and setter:
foo(); # get
foo(42); # set
foo() = 42; # lvalue set
slot::get
my $val = slot::get('name');
Get a slot value by name (without importing an accessor).
slot::set
slot::set('name', $value);
Set a slot value by name.
slot::watch
slot::watch('name', sub { my ($name, $val) = @_; ... });
Register a callback that fires whenever the slot value changes.
slot::unwatch
slot::unwatch('name'); # Remove all watchers
slot::unwatch('name', $coderef); # Remove specific watcher
slot::slots
my @names = slot::slots();
Returns a list of all defined slot names.
AUTHOR
LNATION <email@lnation.org>
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.