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 )