On 4 Jan 2012, at 17:17, Rippl, Steve wrote:
Thanks for the offer of help! Here's the error message and Stack
Trace (excuse the html mail, but I'm thinking it makes it easier to
read?)...
Ah, right!
has details => (
is => 'rw',
isa => 'HashRef',
builder => '_build_details',
);
has _temp_details => (
is => 'rw',
isa => 'HashRef',
default => sub{ {} },
);
sub _build_details {
my $self = shift;
# irrelevant code removed
$self->_temp_details->{foo} # Fails
}
This is because initialization or the slots in the instance will
happen in a random order..
So what's happening is that 'details' is being initialized (and so
calling it's _build_details method) before '_temp_details' is
initialized, which results in the temp_details accessor returning
nothing when it's called (as _temp_details hasn't been initialized yet).
You need to add a 'lazy => 1' to the 'details' attribute, and all
should be well...
(If you _really_ want to ensure that the details attribute is built at
construction time, then also add a BUILD method that just calls the
accessor - ensuring the value gets built).
HTH
Cheers
t0m
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/