note
jeffa
<p>
Yeah, layers of abstraction tend to obscure error messages, making precise documentation necessary. How about this?
<code>
package MyObject;
use Moose;
use MooseX::WithCache;
with 'MooseX::WithCache' => { backend => 'Cache::FileCache' };
has uuid => ( is => 'rw', default => 0 );
has arg1 => ( is => 'rw' );
has arg2 => ( is => 'rw' );
no Moose;
sub get_object {
my $self = shift;
my %args = @_;
my $obj;
if ($args{uuid}) {
$obj = $self->cache_get( $args{uuid} );
}
unless (ref $obj) {
my $uuid = 42; # use real UUID generator!
$obj = MyObject->new( %args, uuid => $uuid );
$self->cache_set( $uuid => $obj );
}
return $obj;
}
package main;
use Data::Dumper;
use Cache::FileCache;
my $object = MyObject->new( cache => Cache::FileCache->new );
my $foo = $object->get_object( arg1 => 'foo', arg2 => 'bar' );
print Dumper $foo;
my $bar = $object->get_object( uuid => 42 );
print Dumper $bar;
</code>
</p>
<div class="pmsig"><div class="pmsig-18800">
<p>jeffa</p>
<font size=1>
<pre>
L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)
</pre></font>
</div></div>
1141449
1141449