NAME

slot - 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");

# 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 - Custom ops, faster than raw hash access (~100M setter, ~65M getter)

  • 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 and returns value

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.

BENCHMARK

bench.pl is included

=== SETTER BENCHMARK ===

		  Rate pp_closure    pp_hash   raw_hash       slot
pp_closure  12277720/s         --       -14%       -82%       -96%
pp_hash     14298759/s        16%         --       -80%       -96%
raw_hash    70063941/s       471%       390%         --       -79%
slot       340183182/s      2671%      2279%       386%         --

=== GETTER BENCHMARK ===

		 Rate pp_closure    pp_hash   raw_hash       slot
pp_closure 11513773/s         --       -14%       -79%       -84%
pp_hash    13345509/s        16%         --       -76%       -82%
raw_hash   54947210/s       377%       312%         --       -25%
slot       72793704/s       532%       445%        32%         --

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.