"handles" accessor not being honoured in constructor?
[email protected] ("Ian Sillitoe")
| Newsgroups | perl.moose |
|---|---|
| Message-ID | <[email protected]> |
I'm sure there's probably a simple answer to the following, however I've got
to the point where I could really do with some advice.
I've abstracted the problem as much as possible to the code appended below.
The "score" attribute only seems to be set after $c->score( $score ) has
been explicitly called rather than after initialisation through
MyClass->new( score => $score ).
I get the impression that the issue is probably related, if not the same, as
one mentioned in a previous post ("bug / feature / idiot user?"
http://thread.gmane.org/gmane.comp.lang.perl.moose/319/focus=325). i.e. it
comes down to the sequence of events involved in creating objects and
registering "handles" (if I understood that correctly). However, if it is
the same, then I'm afraid I didn't really get what the suggested best
solution is: should I hack the BUILD process, rethink the way I'm dealing
with Roles or just RTFM (I think I've done the latter, but I could well be
wrong...)?
Many thanks in advance,
Ian
% cat test.pl
#!/usr/bin/perl -w
use MyClass;
my $c = MyClass->new( score => '75' );
# provided by...
warn $c->score; # undef [Role::HasComparisonResult]
warn $c->normalised_score; # 0 [MyClass::Result]
$c->score( 75 );
warn $c->score; # 75 [Role::HasComparisonResult]
warn $c->normalised_score; # 0.75 [MyClass::Result]
% cat MyClass.pm
package MyClass;
use Moose;
use MyClass::Result;
has 'result' => (
is => 'rw',
isa => 'MyClass::Result',
handles => [qw( query match score normalised_score )],
default => sub { MyClass::Result->new() },
);
1;
% cat MyClass/Result.pm
package MyClass::Result;
use Moose;
with 'Role::HasComparisonResult';
sub normalised_score { (shift)->score / 100 }
1;
% cat Role/HasComparisonResult.pm
package Role::HasComparisonResult;
use Moose::Role;
has 'match' => ( is => 'rw' );
has 'query' => ( is => 'rw' );
has 'score' => ( is => 'rw' );
1;
Directory:
test.pl
MyClass.pm
MyClass/Result.pm
Role/HasComparisonResult.pm
--
Dr Ian Sillitoe
CATH Team -- http://cathdb.info
"Advice is what we ask for when we already know
the answer but wish we didn't" -- Erica Jong