use v5.14;
use Data::Dumper;
package MyClass {
use Moo;
has base_file => (
is => 'rw',
required => 1,
init_arg => 'base',
builder => sub { return 'bar' },
);
}
# builder sub is *NOT* executed
my $object1 = MyClass2->new(base => "foo");
print Dumper($object->base_file); # $VAR1 = 'foo'
# builder sub *IS* executed
my $object2 = MyClass->new();
print Dumper($object2->base_file); # $VAR1 = 'bar'
####
use v5.14;
use Data::Dumper;
use IO::File;
package MyClass {
use Moo;
has base_file => (
is => 'rw',
required => 1,
init_arg => 'base',
coerce => sub {
my $base_fh = IO::File->new( $_[0], '<' ) or die "$_[0]: $!";
$base_fh->binmode(":utf8");
return $base_fh;
},
);
}
my $object = MyClass->new(base => __FILE__);
print Dumper($object->base_file);
####
use v5.14;
use Data::Dumper;
use IO::File;
package MyClass {
use Moo;
has base => (
is => 'rw',
required => 1,
);
has base_file => (
is => 'rw',
lazy => 1,
builder => sub {
my $base_fh = IO::File->new($_[0]->base, '<' ) or die($_[0]->base . ": $!");
$base_fh->binmode(":utf8");
return $base_fh;
},
);
}
my $object = MyClass->new(base => __FILE__);
print Dumper($object->base_file);