Class-Property

 view release on metacpan or  search on metacpan

lib/Class/Property/RO/Lazy.pm  view on Meta::CPAN

    }, $class;
}

sub FETCH
{
    my( $self ) = @_;
    
    if( not defined $self->{'flag_ref'}->{$self->{'object'}} )
    {
        $self->{'flag_ref'}->{$self->{'object'}} = $self->{'object'};
        Scalar::Util::weaken($self->{'flag_ref'}->{$self->{'object'}});
        $self->{'object'}->{$self->{'field'}} = $self->{'init'}->($self->{'object'});
    }
    
    return $self->{'object'}->{$self->{'field'}};
}

1;

lib/Class/Property/RW.pm  view on Meta::CPAN

package Class::Property::RW;
use strict; use warnings FATAL => 'all'; 
use Scalar::Util 'weaken';

#
# This package is prototype. It has no use by itself
#
sub TIESCALAR
{
    my( $class, $field ) = @_;
    return bless {
        'field' => $field
    }, $class;

lib/Class/Property/RW.pm  view on Meta::CPAN

{
    my $self = shift;
    $self = undef;
    return;
}

sub set_object
{
    my $self = shift;
    $self->{'object'} = shift;
    weaken($self->{'object'});
}

1;

lib/Class/Property/RW/Lazy.pm  view on Meta::CPAN

    }, $class;
}

sub STORE
{
    my( $self, $value ) = @_;
    $self->{'object'}->{$self->{'field'}} = $value;
    if( not defined $self->{'flag_ref'}->{$self->{'object'}} )
    {
        $self->{'flag_ref'}->{$self->{'object'}} = $self->{'object'};
        Scalar::Util::weaken($self->{'flag_ref'}->{$self->{'object'}});
    }
    return;
}

sub FETCH
{
    my( $self ) = @_;

eval{    
    if( not defined $self->{'flag_ref'}->{$self->{'object'}} )
    {
        $self->{'flag_ref'}->{$self->{'object'}} = $self->{'object'};
        Scalar::Util::weaken($self->{'flag_ref'}->{$self->{'object'}});
        $self->{'object'}->{$self->{'field'}} = $self->{'init'}->($self->{'object'});
    }
};
if( $@ )
{
    use Data::Dumper;
    use Carp qw(confess);
    print Dumper($self);
    confess $@ if $@;
}

lib/Class/Property/RW/Lazy/CustomSet.pm  view on Meta::CPAN

    }, $class;
}

sub STORE
{
    my( $self, $value ) = @_;
    $self->{'setter'}->($self->{'object'}, $value );
    if( not defined $self->{'flag_ref'}->{$self->{'object'}} )
    {
        $self->{'flag_ref'}->{$self->{'object'}} = $self->{'object'};
        Scalar::Util::weaken($self->{'flag_ref'}->{$self->{'object'}});
    }
    return;
}

sub FETCH
{
    my( $self ) = @_;
    
    if( not defined $self->{'flag_ref'}->{$self->{'object'}} )
    {
        $self->{'flag_ref'}->{$self->{'object'}} = $self->{'object'};
        Scalar::Util::weaken($self->{'flag_ref'}->{$self->{'object'}});
        $self->{'setter'}->($self->{'object'}, $self->{'init'}->($self->{'object'}));
    }
    
    return $self->{'object'}->{$self->{'field'}};
}

1;



( run in 0.719 second using v1.01-cache-2.11-cpan-65fba6d93b7 )