package MooseX::CachedAccessor; use 5.008; use Moose::Exporter; use Data::Dumper; use MooseX::Role::Parameterized; Moose::Exporter->setup_import_methods( with_caller => [ 'cache_accessor' ], ); method cache_accessor => sub { my ($caller,$name,%args) = @_; my $code = $caller->can('around'); $code->($name,sub { my $orig = shift; my $self = shift; return $self->{_cache_data}->{$name}->{value} if $self->{_cache_data}->{$name} && $self->{_cache_data}->{$ +name}->{expires} > time; print "fresh\n"; $self->{_cache_data}->{$name}->{expires} = time + $args{expires} +; $self->{_cache_data}->{$name}->{value} = $self->$orig; }); }; 1; ---------------------------------------- package Foo; use Moose; use MooseX::CachedAccessor; has 'bar' => ( is => 'ro', isa => 'Str', default => '' ); cache_accessor 'bar' => (expires => 3); 1; ---------------------------------------- use Foo; my $foo = Foo->new(bar=>'#'); while (1) { print $foo->bar, "\n"; sleep(1); }
In reply to Re: Extending Moose
by holli
in thread Extending Moose
by zerohero
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |