The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Ryu::Observable - plus ça change

SYNOPSIS

 # Set initial value
 my $observed = Ryu::Observable->new(123)
   # and a callback for any changes
   ->subscribe(sub { print "New value, is now: $_\n" });
 # Basic numeric increment/decrement should trigger a notification
 ++$observed;
 # To assign a new value, use ->set_numeric or ->set_string
 $observed->set_numeric(88);

DESCRIPTION

Simple monitorable variables.

METHODS

Public API, such as it is.

as_string

Returns the string representation of this value.

as_number

as_numeric

Returns the numeric representation of this value.

(this method is available as as_number or as_numeric, both operate the same way)

new

Instantiates with the given value.

 my $observed = Ryu::Observable->new('whatever');

subscribe

Requests notifications when the value changes.

 my $observed = Ryu::Observable->new('whatever')
   ->subscribe(sub { print "New value - $_\n" });

unsubscribe

Removes an existing callback.

 my $code;
 my $observed = Ryu::Observable->new('whatever')
   ->subscribe($code = sub { print "New value - $_\n" })
   ->set_string('test')
   ->unsubscribe($code);

set

Sets the value to the given scalar, then notifies all subscribers (regardless of whether the value has changed or not).

value

Returns the raw value.

set_numeric

set_number

Applies a new numeric value, and notifies subscribers if the value is numerically different to the previous one (or if we had no previous value).

Returns $self.

(this method is available as set_number or set_numeric, both operate the same way)

set_string

Applies a new string value, and notifies subscribers if the value stringifies to a different value than the previous one (or if we had no previous value).

Returns $self.

source

Returns a Ryu::Source, which will emit each new value until the observable is destroyed.

LVALUE METHODS

These require Sentinel to be installed.

lvalue_str

Returns a Sentinel lvalue accessor for the string value.

This can be used with refaliasing or foreach loops to reduce typing:

    for($observable->lvalue_str) {
      chomp;
      s/_/-/g;
    }

Any attempt to retrieve or set the value will be redirected to "as_string" or "set_string" as appropriate.

lvalue_num

Returns a Sentinel lvalue accessor for the numeric value.

This can be used with refaliasing or foreach loops to reduce typing:

    for($observable->lvalue_num) {
     ++$_;
     $_ *= 3;
    }

Any attempt to retrieve or set the value will be redirected to "as_number" or "set_number" as appropriate.

METHODS - Internal

Don't use these.

notify_all

Notifies all currently-subscribed callbacks with the current value.

AUTHOR

Tom Molesworth <TEAM@cpan.org>.

LICENSE

Copyright Tom Molesworth 2011-2021. Licensed under the same terms as Perl itself.