NAME

Unknown::Values::Instance::Object - Internal null value object for the "Unknown::Values" distribution

VERSION

version 0.102

SYNOPSIS

package Employee {
    use parent 'Person';
    use Unknown::Values ':OBJECT';

    sub new {
        my ( $class, $id ) = @_;
        my $self = $self->next::method($id) // return unknown;
        ...
        return $self
    }
    
    # ...
}

...

The following assumes that $employee is unknown:

my $employee = Employee->new($id);

# you can call any method on $employee
if ( $employee->salary > $threshold ) {
    ... will never get here if $employee is unknown
}

say $employee->name; # fatal
if ( is_unknown $employee ) {
    ... works as expected
}

if ( $employee->isa('Employee') ) {
    ... isa always returns unknown
}

DESCRIPTION

use Unknown::Values ':OBJECT' implements a variation of the NULL object pattern.

In addition to having all of the behavior of Unknown::Values, you can call any method on the object and it will return the unknown object instances.

Subclassing Unknown Objects

Sometimes you want to provide a default value for a method. You can subclass unknown objects to allow this:

package Unknown::Person {
    use parent 'Unknown::Values::Instance::Object';

    sub name { return '<unknown>' }
}

package Person {
    sub new {
        my ( $class, $name, $age ) = @_;

        if ( not defined $name ) {
            return Unknown::Person->new;
        }
        return bless {
            name => $name,
            age  => $age,
        } => $class;
    }

    sub name { $_[0]->{name} }
    sub age  { $_[0]->{age} }
}

AUTHOR

Curtis "Ovid" Poe <ovid@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2021 by Curtis "Ovid" Poe.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.