Я использую Moose для создания объекта, но метод builder '_initialize_log' не может получить значение атрибута name.Moose Attribute Not Defined in Builder Метод
Есть ли способ запустить метод только после того, как этот атрибут был установлен?
EFT.pm
package EFT;
use Moose;
# Attributes
has name => (
is => "ro",
isa => "Str",
required => 1
);
has log => (
is => 'rw',
isa => 'Str',
builder => '_initialize_log'
);
sub _initialize_log
{
$self->{'log'} = "****\n";
$self->{'log'} .= $self->{'name'} . "\n";
$self->{'log'} .= `date`;
$self->{'log'} .= "****\n";
}
test.pl
#!/usr/bin/perl
use strict;
use warnings;
use EFT;
# Constants
use constant NAME => 'Test Script';
# Create script object
my $script = EFT->new(name => NAME);
print $script->{'log'};
Выход
Use of uninitialized value in concatenation (.) or string at EFT.pm line 46.
****
Thu Mar 3 12:54:31 EST 2016
****
См. Раздел о лень в [Moose :: Manual :: Attributes] (https://metacpan.org/pod/Moose::Manual::Attributes#Laziness). – ThisSuitIsBlackNot